第17期-直播回顾丨有关SPDK NVMe-oF解决方案介绍
本周,在SDNLAB直播活动【 一期一会】中,英特尔资深软件工程师——杨子夜与大家进行了在线交流,分享有关SPDK NVMe-oF解决方案的介绍,介绍了什么情况下需要NVMe-oF方案和SPDK NVMe-oF解决方案的发展历史、架构,以及基于RDMA和TCP两种传输的设计实现细节,同时也分享了一些性能优化的数据。
(文末有PPT下载方式)
视频回顾和PPT分享
直播问题总结
Q:
为什么要推出SPDK的NVMe-oF解决方案?
A:
其实这个问题在我的演讲中已经提过了。SPDK是一套用户态的针对NVMe SSD 优化的软件库,所以推出SPDK的NVMe-oF 方案主要是为了性能。基于SPDK的用户态NVMe 驱动,以及SPDK的高效编程框架,能更好的发挥出性能(优于内核)。另外在用户态部署NVMe-oF的服务,也便于运维以及管理,摆脱对kernel版本的依赖
Q:
SPDK 和DPDK怎么结合?
A:
SPDK 对于CPU(线程)调度, 用户态的设备管理,和DMA的内存管理等都有相应的API 抽象。其中DPDK库是SPDK高性能的基石,因为对于这些抽象的缺省实现主要由DPDK 承载。当然用户也可以根据业务的需要选择性的替换成自己的软件库。比如把内存管理的那部分抽象出来,集成自己的软件库。
Q:
SPDK里面对硬件卸载提供哪些功能?
A:
SPDK 库中暂时没有“显示”的library可以把任务卸载到FPGA等硬件中。但是目前SPDK 针对Intel平台有用户态的CBDMA 驱动;包括对Intel的DSA(Data streaming accelerator)也有相应的用户态驱动IDXD(Intel Data Accelerator Driver, 目前在实现过程中)。这些驱动可以卸载一些内存相关的操作,比如内存拷贝等。因此可以在CPU非常繁忙的时候,如果进行相关的卸载可以提高性能。另外SPDK 目前已经用于一些卸载方案中,比如在各种DPU(Data processing unit)中充当了重要的角色,比如集成在一些智能网卡中。
Q:
请问NVMe over TCP有内核版本要求吗?
A:
至少需要Linux 内核版本在5.1以上,选一个比较稳定的版本比较合适。
Q:
RDMA现在有成熟的用户态的verbs库和SPDK 配合吗?
A:
目前SPDK 中使用了libibverbs, librdmacm相关的库,这些是非常成熟的RDMA 编程相关的库。但是这些库原则上还是依赖于内核。比如需要内核有相应的驱动去管理具有RDMA功能的网卡,或者内核支持一些模拟(比如software RoCE)。目前没有纯用户态的verbs相关的库, 比如说可以直接驱动DPDK管理用户态网卡然后提供RDMA的功能。
Q:
可以聊下和SmartNic的结合吗?
A:
目前可以看到一些公开的信息, 比如Mellanox公司(被NVDIA收购)的智能网卡已经使用了SPDK;此外阿里云的神龙服务器中也用了SPDK。这些做法本质是把SPDK的vhost实现从主机侧放到了智能网卡中。因为智能网卡对主机模拟virtio-net, virtio-blk,甚至模拟NVMe 等设备。那么非常自然的,一些基于SPDK的vhost将加速, 比如基于SPDK的 virtio-blk的加速(SPDK vhost-block)也被下沉到智能网卡中。因为SPDK的框架是非常强大的。对主机侧来讲,智能网卡中的SPDK其实作为了主机侧存储服务的服务端(target);然后对远端的存储服务来讲,智能网卡中的SPDK又充当了客户端的角色(initiator)。
若视频无法播放可扫描下方二维码,从B站观看
扫码关注【SDNLAB】公众号????,
在后台回复“第17期直播”即可获取课件。
———————————————————