前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用SPDK实现存储加速

用SPDK实现存储加速

作者头像
惠伟
发布2022-04-28 17:53:35
2K0
发布2022-04-28 17:53:35
举报
文章被收录于专栏:虚拟化笔记虚拟化笔记

个人理解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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-08-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • cinder
  • qemu
  • DPU
  • ceph
  • 开发和部署
  • 总结
  • 参考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档