用SPDK实现存储加速

2022-04-28 17:53:35 浏览数 (1)

个人理解nvme能提高存储性能,就像4G比3G快一样,电磁波还是光速,但协议变了,所以快了。rdma应用跑在用户态能减小存储时延,spdk在用户态实现nvme驱动,天然能和rdma结合,而且两者的队列能一一映射,能达到锦上添花的效果。坏处就是kernel upstream实现的nvme代码无法复用,网卡硬件得支持rdma,rdma的库很多,出了问题估计会有找不得北的感觉。

用mellanox connectx-5硬件做nvme-over-rdma offload,IO增强型企业级实例和裸金属不同部分在于前端(qemu模拟和DPU模拟的区别),后端方案一样。存储组提供SPDK和ceph,SPDK提供rpc_server/iscsc target/nvme target,ceph提供真正的备份和落盘功能。虚拟化组也用SPDK,IO增强型企业级实例SPDK运行在物理机上,裸金属v3 SPDK运行在DPU上,SPDK作为nvme-over-rdma的initiator,同时要配置硬件offload。

目前虚拟化对接的是ceph,新架构虚拟化对接SPDK,SPDK后面才是ceph,这种架构和裸金属v2也统一,裸金属v2用了iscsi,新架构用nvme,裸金属v2 iscsi initiator运行在裸金属中,iscsi target运行在存储组的SPDK iSCSI target server,IO增强型企业级实例nvme initiator运行在虚拟化组的SPDK中,nvme-over-rdma target运行在存储组的SPDK target server中。

cinder

cinder通过SPDK driver连接存储组提供的SPDK rpc_server在SPDK上创建一个nvme-of target,计算节点上qemu spdk真正去连接这个target。

https://docs.openstack.org/cinder/latest/configuration/block-storage/drivers/spdk-volume-driver.html

https://review.opendev.org/c/openstack/cinder/ /572759

https://review.opendev.org/c/openstack/cinder/ /564229

qemu

qemu模拟nvme,把nvme内存共享级SPDK进程,虚拟化组的SPDK轮询guest里driver的操作,作为nvme-of initiator把IO交给nvme-of target处理。

qemu需要这个patchhttps://review.gerrithub.io/c/spdk/qemu/ /406011/。

mellanox upstream kernel实现的nvme rdma tranport能配置offload,那么需要spdk中实现的rdma transport也能实现offload。

The SPDK NVMe-oF RDMA transport is implemented on top of the libibverbs and rdmacm libraries, which are packaged and available on most Linux distributions. It does not use a user-space RDMA driver stack through DPDK.

offload和硬件具体实现有关系,那么就会用到厂商自己的驱动,DPDK中也有厂商自己的驱动,难道nvme和rdma一个通用驱动就能驱动所有厂商的硬件?libibverbs和rdmacm又怎么配置硬件offload?

DPU

DPU前端是硬件 SNAP模拟nvme,后端还是SPDK,同理SPDK作为nvme initiator对接存储组提供的nvme target,同时配置硬件实现offload功能。

理论上SPDK也可以用librbd直接对接ceph,但DPU卡SPDK没有编译进librbd的功能,SPDK是集成进SNAP的,要编译SPDK得重新编译SNAP,没有SNAP代码。

ceph

由存储组开发这部分功能,后端spdk用librbd bdev是否影响性能和时延?如果不用ceph,只用spdk怎么实现备份?

开发和部署

网络部分完全利用裸金属DPU方案。

存储部分qemu和SPDK用到大页内存,SPDK还需要独点cpu用轮询,需要确认openstack S版本是否能支持大页内存和vhost-nvme配置,nova-compute还需要从cinder获取volume信息,配置SPDK initiator。

总结

对nvme/rdma/spdk都是宽泛的了解,完全是赶鸭子上架,大公司大团队搞了这么久的东西不可能一下子就消化了,后面一定会推敲细节,看代码深入思考,目前请不要拍砖。

参考

https://www.mellanox.com/files/doc-2020/pb-connectx-5-en-card.pdf

https://qemu.readthedocs.io/en/latest/system/devices/nvme.html

https://events19.linuxfoundation.cn/wp-content/uploads/2017/11/Accelerating-NVMe-I_Os-in-Virtual-Machine-via-SPDK-vhost_Ziye-Yang-_-Changpeng-Liu.pdf

https://oenhan.com/qemu-spdk-vhost-user-nvme

0 人点赞