个人理解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通过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模拟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前端是硬件+SNAP模拟nvme,后端还是SPDK,同理SPDK作为nvme initiator对接存储组提供的nvme target,同时配置硬件实现offload功能。
理论上SPDK也可以用librbd直接对接ceph,但DPU卡SPDK没有编译进librbd的功能,SPDK是集成进SNAP的,要编译SPDK得重新编译SNAP,没有SNAP代码。
由存储组开发这部分功能,后端spdk用librbd bdev是否影响性能和时延?如果不用ceph,只用spdk怎么实现备份?
网络部分完全利用裸金属DPU方案。
存储部分qemu和SPDK用到大页内存,SPDK还需要独点cpu用轮询,需要确认openstack S版本是否能支持大页内存和vhost-nvme配置,nova-compute还需要从cinder获取volume信息,配置SPDK initiator。
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
原文链接:https://cloud.tencent.com/developer/article/1989618
(免费订阅,永久学习)学习地址: Dpdk/网络协议栈/vpp/OvS/DDos/NFV/虚拟化/高性能专家-学习视频教程-腾讯课堂
更多DPDK相关学习资料有需要的可以自行报名学习,免费订阅,永久学习,或点击这里加qun免费
领取,关注我持续更新哦! !