什么是NVMe over fabrics?

NVMe接口协议的发展对基于SSD的存储阵列来说是一个福音。它进一步为SSD提供动力,以获得高性能和减少访问数据的延迟。NVMe over fabrics网络协议进一步扩展了优势,在远程访问存储阵列时将NVMe功能保留在网络结构上。

如果将NVMe协议与存储阵列(包括高速NAND和SSD)结合使用,当基于NVMe的存储阵列通过共享存储或存储区域网络(SAN)进行访问时,会出现延迟。在SAN中,数据应通过以太网、RDMA技术(iWARP / RoCE)或Fabric Channel在主机(发起端)和支持NVMe的存储阵列(目标)之间传输。由于在传输数据的过程中将SCSI命令转换为NVMe命令而导致延迟。

为了解决这一瓶颈,NVM Express引入了NVMe over fabric协议,取代iSCSI作为存储网络协议。有了这个,NVMe的好处在SAN类架构的的网络结构上得以实现,带来了一个完整的端到端基于NVMe的存储模型,而该模型对于新时代的工作负载非常高效。

NVMe-oF支持所有可用的网络结构技术,如RDMA(RoCE,iWARP)、Fibre Channel(FC-NVMe)、Infiniband、Future Fabrics和Intel Omni-Path架构。

NVMe over fabric和OpenStack

OpenStack包含一个用于集中管理数据中心运维的开源项目库。OpenStack为实现高吞吐量的高效NVMe存储模型提供了理想的环境。OpenStack Nova和Cinder是OpenStack解决方案中NVMe-oF使用的组件。这包括创建和集成Cinder NVME-oF目标驱动程序和OpenStack Nova。

OpenStack Cinder是OpenStack部署的块存储服务项目,主要用于创建为基于云的应用程序提供持久存储的服务。它为用户提供访问存储资源的API,而不会泄露存储位置信息。

OpenStack Nova是OpenStack中的组件,可帮助提供对虚拟机、容器和裸机服务器等计算资源的按需访问。在NVMe-oF中使用OpenStack Nova将NVMe卷挂载到VM。

Rocky版本提供了对OpenStack中NVMe-oF的支持。建议的解决方案需要RDMA NIC并支持内核启动器和内核目标。

支持NVMe-oF目标

基于上面提出的解决方案,我们有两个选择来实现OpenStack NVMe-oF——第一个是从Rocky版本开始支持内核NVMe-of目标驱动程序;第二个实现是英特尔基于SPDK的NVMe-oF实现,包含SPDK NVMe-oF目标驱动程序和SPDK LOLVOL(逻辑卷管理器)、后端(将出现在即将发布的OpenStack Stein版本中)。

Kernel NVMe-oF Target(从OpenStack Rocky版本开始支持)。

这里的实现包括对内核目标和内核启动器的支持。但是基于内核的NVMe-oF目标实现在每个CPU核心的IOP数量方面存在局限性。此外,基于内核的NVMe-oF由于CPU中断、许多系统调用以读取数据和在线程之间传输数据而存在延迟问题。


SPDK NVMe-oF Target (将出现在Openstack Stein版本中)。

为何选择SPDK?

SPDK架构通过将所有必需的应用程序驱动程序移动到用户空间(而不是内核)实现了OpenMeack的高性能,并支持在轮询模式下运行而不是中断模式和无锁(避免使用CPU循环同步线程之间的数据)处理。

我们来看看这意味着什么。

在SPDK实现中,用于存储操作(如存储、更新、删除数据)的存储驱动程序与运行通用计算进程的内核空间隔离。这种存储驱动程序与内核的隔离节省了内核中处理所需的时间,并使CPU周期花更多时间在用户空间执行存储驱动程序上。这避免了内核空间中的其他通用计算驱动程序中断和锁定存储驱动程序。

在典型的I / O模型中,应用程序请求读/写数据访问并等待I / O周期完成。在轮询模式下,一旦应用程序发出数据访问请求,它会先去执行其他,并在定义的时间间隔后返回,以检查先前请求的完成情况。这减少了延迟和进程开销,并进一步提高了I / O操作的效率。

总结一下,SPDK专门用于从非易失性介质中获取性能,包含用于可扩展和高效存储应用程序的工具和库,利用用户空间和轮询模式组件,以实现每个核心数百万IO / s。SPDK架构是开源BSD许可块,针对利用最新一代CPU和SSD中获得高吞吐量进行了优化。


为何选择SPDK NVMe-oF Target?

根据使用SPDK的NVMe-oF性能基准测试报告,我们注意到:

——随着SPDK NVMe-oF目标和启动器I / O核心的扩展,吞吐量逐渐增加,延迟几乎呈线性下降。

——与Linux Kernel NVMe-oF目标相比,SPDK NVMe-oF目标的IOPS /core性能提高了7.3倍,而且运行4K 100%随机写入工作负载时,每个NVMe-oF子系统的连接数量增加(16个)。

——SPDK NVMe-oF启动器比具有基于null bdev的后端的内核NVMe-oF启动器快3倍50GbE。

——SPDK将NVMe-oF软件开销降低了10倍。


SPDK使用单个CPU内核饱和8个NVMe SSD

SPDK NVMe-oF实现

这是NVMe-oF与OpenStack(Cinder和Nova)集成的第一个实现,它利用NVMe-oF目标驱动程序和基于SPDK LVOL(逻辑卷管理器)的SDS存储后端。这为内核LVM和内核NVMe-oF目标提供了高性能替代方案。


如果与基于Kernel的实现相比,SPDK可降低NVMe-oF软件开销,并带来高吞吐量和高性能。我们可以等着瞧瞧这些将如何添加到即将发布的OpenStack Stein版本中。

原文作者:Superuser

信息化和软件服务网 - 助力数字中国建设 | 责编:左右