DPU应用场景系列(二) 存储功能卸载
NVMe over Fabric(又名NVMe-oF)是一个相对较新的协议规范,旨在使用NVMe通过网络结构将主机连接到存储,支持对数据中心的计算和存储进行分解。NVMe-oF协议定义了使用各种通用的传输协议来实现NVMe功能的方式。
在NVMe-oF诞生之前,数据存储协议可以分为三种:
(1)iSCSI:是一种基于IP的存储网络标准,在TCP/IP网络上通过发送SCSI命令来访问块存储服务。
(2)光纤通道(Fibre Channel):是一种高速的数据传输协议,提供有序无损的块数据传输。主要用于关键高可靠要求的业务上。
(3)SAS(Serial Attached SCSI):一种点对点串行协议,通过SAS线缆传输数据。
上述数据存储协议,在当今数据爆发的时代,已经无法满足大数据量的传输。NVMe-oF的出现,不仅解决了上述协议的性能瓶颈问题,它还允许组织为高度分布式、高度可用的应用程序实施横向扩展的存储。通过将NVMe协议扩展到SAN设备,NVMe-oF提高了CPU的使用效率,同时提高了服务器和存储应用程序之间的连接速度。
NVMe-oF主要支持三大类Fabric传输选项,分别是FC、RDMA和TCP,其中RDMA支持InfiniBand、RoCEv2和iWARP。
NVMe-oF/FC和第六代FC可以共存于同一基础设施中,避免了数据中心的叉车升级。但是,NVMe-oF/FC不具有软件定义存储的能力。
NVMe-oF/RDMA利用了RDMA网络的优势,是理想的Fabric,提供了低延迟、低抖动和低CPU使用率低传输层协议,可以最大限度利用硬件加速,避免软件协议栈开销。同时,由于RDMA是一种内存读写技术,可以应用在众多场景中,如GPUDirect Storage的应用场景。
NVMe-oF/TCP利用了TCP协议的可靠性传输的特点,以及TCP/IP网络的通用性和良好的互操作性,可以完美的应用于现代数据中心网络。在相对性能要求不是非常高的场景,NVMe-oF/TCP可作为备选。
NVMe支持Host端(Initiator或Client)和Controller端(Target或Server),目前DPU智能网卡硬件加速的场景中,包括如下四种情况:
(1)普通智能网卡硬件加速NVMe-oF Initiator。智能网卡支持NVMe-oF/TCP和NVMe-oF/RoCEv2作为Initiator,通过硬件卸载NVMe-oF/TCP或NVMe-oF/RoCEv2,用于计算和存储之间,来达到较高性能。
(2)支持GPUDirect Storage的智能网卡加速NVMe-oF Initiator和Target。GPUDirect Storage是NVIDIA提出的GPU可以绕过CPU直接访问存储磁盘的技术,RDMA技术是GPUDirect Storage的基础。这类网卡可以通过硬件卸载NVMe-oF/RDMA来实现GPU与远端存储服务的直接访问。常见的如NVMe-oF/RDMA IB和NVMe-oF/RoCEv2。
(3)智能网卡硬件加速NVMe-oF Target。该场景主要是通过智能网卡提供PCIe Root Complex能力和NVMe-oF Controller端的硬件卸载加速,来实现NVMe存储服务器。如Broadcom Stingray PS1100R是这个场景的代表之一。
(4)DPU芯片硬件加速NVMe-oF Target。该场景是通过DPU芯片提供多个PCIe Root Complex通道以及多个100Gbps的网卡实现的超大吞吐的存储服务器。Fungible FS1600 12x100Gbps带宽吞吐的存储服务器是这个场景的典型代表。
图 NVMe-oF硬件卸载方式
OpenStack从Rocky版本已经支持了NVMe-oF,通过OpenStack Cinder通过消息在NVMe-oF Target上来创建,查询和删除卷等,OpenStack Nova在主机上通过NVMe-oF Initiator发现NVMe-oF存储设备,并将存储设备信息传递给Hypervisor来实现虚拟机挂载磁盘。另外,OpenStack集成Ceph做块存储和对象存储已经非常成熟,Ceph的后端存储也渐渐的从使用本地磁盘的方式转向远端NVMe存储,这样NVMe-oF为Ceph存储服务提供了容量可伸缩的能力。
基于virtio的virtio-blk是KVM-Qemu虚拟化生态中的虚拟化块存储的一种实现方式,利用了virtio共享内存的机制,提供了一种高效的块存储挂载的方法。Guest OS内核通过加载virtio-blk驱动,实现块存储的读写,无需额外的厂家专用驱动。Virtio-blk设备在虚拟机以一个磁盘的方式呈现,是目前应用最广泛的虚拟存储控制器。
图 基于vDPA架构的virtio-blk硬件卸载
由于virtio机制通过硬件实现加速已经是通用做法,所以利用这个优势,virtio-blk卸载到硬件,已经是必然趋势。在智能网卡中,将virtio-blk到后端映射到如NVMe-oF的远端磁盘上,这样相比较当前virtio-blk的用法,不需要在主机系统中挂载很多的远端NVMe磁盘,由智能网卡直接完成映射,更加安全。
在2021年KVM论坛会议中,Redhat提出统一软硬件卸载virtio-blk方案,正式将virtio-blk加入vDPA框架,同virtio-net公用相同的框架,来完成硬件卸载控制平面。