通过 SPDK NVMe/TCP 进行的应用设备队列 (ADQ) 性能测试测试证实,
应用程序队列 (ADQ) 技术可为面向 NVM Express (NVMe) over TCP 存储应用的存储性能开发工具套件 (SPDK) 库带来额外的性能提升。

  • ADQ 和 SPDK 均可提高存储性能,但启用 ADQ 能够使用 SPDK 的 NVMe over TCP 存储系统的可预测性提升、平均时延降低以及应用吞吐量提升。

  • 由 ADQ 增强的 NVMe/TPC 和 SPDK 不仅易于部署还具有高性能和支持日后扩展,可助力企业在不遭受重大性能损失的情况下,尽可能以经济高效的方式轻松过渡到 NVMe-oF。

author-image

作者

NVMe over Fabrics 的吸引力

开发 NVM Express (NVMe) 标准的目的是为了顺应速度更快的固态盘 (SSD),取代为机械硬盘设计的串行附加 SCSI (SAS) 和串行 ATA (SATA) 等较慢的标准。起初,人们使用 NVMe 通过 PCIe 总线直接将固态盘连接到计算机和服务器。不过, 这种直连式存储 (DAS) 可能会导致孤立的存储设备的利用率不足、数据复制要求低效,以及难以在不扩展现代数据中心计算规模的情况下扩展存储。

而开发 NVMe over Fabrics (NVMe-oF) 标准则是为了通过以太网、InfiniBand 和光纤通道等网络架构扩展 NVMe 标准的性能。以太网支持的协议有 “基于融合以太网的 RDMA” (RoCE)、iWARP 以及 “传输控制协议” (TCP)。NVMe-oF 支持多台主机通过网络共享 NVMe 固态盘池。对于渴望获得可扩展的快速共享存储效率的数据中心运营商,这种存储架构很有吸引力。

本文重点介绍了结合使用应用程序队列 (ADQ) 和 NVMe over TCP 以及存储性能开发套件 (SPDK) 所取得的性能提升方面的测试结果。


实施 NVMe-oF 的决策和权衡

NVMe-oF 要求底层传输提供可靠的 NVMe 命令和数据传输。对于实施 NVMe-oF 时可能采用的三种基于以太网的传输协议选择方案,英特尔® 以太网 800 系列网络适配器均提供支持,如图 1 所示。

图 1. NVMe-oF 使用以太网时的三种传输协议选择方案

RoCE v2

RoCE v2 基于 RDMA,是 NVMe-oF 规范中定义的第一种传输协议,因此是一种广泛采用的传输协议。同时,它也是最难实施的协议,因为它需要无损交换机和额外的网络配置,这可能招致可预见的成本并增加操作复杂度。另外也难以超出机架层面扩展1


iWARP

此协议同样基于 RDMA。它晚于 RoceV2 出现,由于建立在 TCP/IP 之上,并使用标准交换机和网络配置,因此比 RoceV2 更容易实施一些。但是,iWARP 仍然需要启用了 RDMA 的网络接口控制器 (NIC)。


TCP

与基于 RDMA 的协议不同,NVMe over TCP 使用的是在主机 CPU 上运行的标准 Linux TCP 堆栈。利用这种较新的传输协议选择方案,可以在通过任何标准 IP 网络互连的主机和目标机之间进行高效的端到端 NVMe 操作。它支持大型数据中心利用现有的、采用多层交换机拓扑及传统以太网网络适配器的泛在以太网基础设施2。但由于软件开销问题,其速度较慢。

如表 1 中的总结所示,一方面是易于实施和扩展的 TCP 选择方案,另一方面是性能更高的 RDMA 选择方案,直到现在技术决策者 (TDM) 还面临这两方面的权衡。

表 1. 选择 NVMe-oF 传输协议时的权衡3 

显然,如果能够缩小性能差距,TCP 选择方案最有吸引力,这既归结于它的标准网络基础设施和网络配置,也归结于它广泛用于整个数据中心范围的使用模型。有两项技术极有可能缩小这一差距:
 

  • SPDK 提供开源组件,用于在使用 Linux 内核 TCP 堆栈的用户空间中实施 NVMe over TCP。英特尔是 SPDK 的主要支持者。
  • ADQ 是一种用于系统级网络输入/输出 (I/O) 性能的开放技术,可提高应用在响应时间上的可预测性。现在 Linux 内核(4.19 版或更高版本)中已提供 ADQ,在英特尔® 以太网 800 系列网络适配器中也得到支持。

本文中介绍的测试衡量了结合使用这些技术所带来的性能——只有在 2020 年 7 月发布的 SPDK 版本 (20.07) 中包含支持 ADQ 的增强功能时,才能达到这种性能。


ADQ 和 SPDK 均可提高存储性能

ADQ 就好比重要应用数据专享的以太网快速通道。它为关键应用通过以太网传输数据提供专用队列并进行流量整形。ADQ 的目标是通过显著减少尾时延确保高优先级应用能够获得可预测的高性能。尾时延是原本运行较快的系统中出现缓慢的异常值导致的结果。随着数据中心不断扩展,服务器和存储设备亦随之增加,尾时延成为一种越来越重要的因素。

图 2. ADQ 就好比应用数据存储的专用以太网快速通道


在与开源 Redis4、Memcached5 以及 Aerospike6 等应用一同使用时,ADQ 可以明显改善尾时延、提升吞吐量。 

SPDK 组件可以减少通过 NVMe over TCP 访问远程网络连接的固态盘时产生的软件开销。

接下来,本文将更详细地考察一个直到现在尚未测试过的问题——“ADQ 能在多大程度上提升使用 SPDK 的 NVMe over TCP 系统的性能?”
 

结合使用 ADQ 和 SPDK:在启用与不启用 ADQ 两种情况下测试 SPDK

英特尔在未启用 ADQ 的情况下测试了使用 SPDK 的 NVMe over TCP 存储系统,了解基线配置时的可预测性、时延和吞吐量,然后又在启用 ADQ 的情况下对同一系统进行了测试。
 

图 3. 采用 ADQ 测试拓扑的 SPDK NVMe over TCP

测试对象为两个基于第二代英特尔® 至强® 可扩展处理器的平台,分别配置为发起方 (Initiator) 和目标方 (Target)。这两个平台通过 100 Gbps 的以太网链路背靠背地连接,每个服务器都使用英特尔® 以太网 800 系列网络适配器。在每个适配器中启用或禁用 ADQ。I/O 读写命令由发起方中的 fio 生成,然后发送给目标方,以访问目标方的六个英特尔® 傲腾™ 固态盘 DC P4800X。测试配置详情见附录。


可预测性

通过测试测量了存储系统的可预测性,此值由 99.99% 的时间(即 P99.99 标准)可以实现的最低时延来定义。如图 4 所示,在启用 ADQ 的情况下,使用不同数量内核时的可预测性提高幅度最高达 33%。

图 4. 启用 ADQ 时尾时延得到改善 (P99.99)(4 KB 随机读取,1,500 个最大传输单元 [MTU],队列深度 [QD]=32,每目标内核三个连接)

请注意,这些测试结果包括对最多使用八个目标内核的系统进行的测试。不过,正如将在后文 “吞吐量” 部分探讨的,在启用 ADQ 的情况下,只使用五个内核时,100 Gbps 的链路就会饱和。因此,使用五个以上内核的 ADQ 结果表明的是 I/O 工作负载超出可用网络带宽时的影响。通常情况下,一个内核不会导致系统发生超出链路饱和点的现象,因为这会对时延产生不利影响。


时延

在启用 ADQ 的情况下,测试中的平均时延得以降低。使用 5 个内核时的时延降低 30%,也即启用 ADQ 时 100 Gbps 的链路吞吐量达到饱和的情形。

图 5. 启用 ADQ 时平均时延降低(4 KB 随机读取,1,500 个 MTU,QD=32,每目标内核三个连接)


吞吐量

在启用 ADQ 的情况下,无论使用多少内核,测试中的吞吐量都会增加。使用 5 个 SPDK 目标内核时的吞吐量增加 36%,这正是启用 ADQ 时 100 Gbps 的链路在 280 万 IOPS 左右达到吞吐量饱和点的情形。尽管在 SPDK 目标内核达到五个以上时,ADQ 的优势会因链路达到饱和点而减少,但真正的优势是 ADQ 能减少链路达到饱和状态所需要的 SPDK 目标内核数。在未启用 ADQ 的基线测试情况下,需要 8 个 SPDK 目标内核,链路才能达到饱和。在未使用 ADQ 的情况下原本还需要三个内核才能让链路达到饱和,而这三个内核现在可以用于其他计算用途。

图 6. 启用 ADQ 时吞吐量增加(4 KB 随机读取,1,500 个 MTU,QD=32,每目标内核三个连接)


分析

在启用 ADQ 的情况下使用 SPDK,NVMe over TCP 的可预测性、时延和吞吐量性能显著提高,会在通过使用 SPDK 已经改进 NVMe over TCP 性能的基础上带来额外的性能提升。对那些必须决定采取何种路由来实施 NVMe-oF 的人而言,这有利地改变了游戏规则。TCP 路由的实施便利性和可扩展性可以与不太明显的性能差距相抵。


表 2. 有了 ADQ,NVMe over TCP 成为一种更有吸引力的选择3

对于在 CPU 利用率方面使用 NVMe/TCP 的方法,ADQ 也有所助益。与 RDMA 不同,TCP 传输堆栈是消耗 CPU 内核周期的 Linux 内核的一部分。不过,ADQ 会通过减少所需要的内核数量来减轻消耗 CPU 内核周期带来的影响。启用 ADQ 的 TCP 存储传输选择方案使用较少的内核(在本测试中,启用 ADQ 时的内核数量为 5 个,不启用 ADQ 时的内核数量为 8 个)即可让 100 Gbps 的链路达到饱和,腾出原本在未启用 ADQ 的情况下为让链路达到饱和所需的额外内核,并将这些内核用于其他计算用途。


结论

每个企业或机构都必须选择最适合自身需求的 NVMe-oF 传输方法。在高性能至关重要并且可以借助专家资源实现该目标的情况下,从 RDMA 选择方案中择一而用或许就是合适之选。但对于那些只想在不遭受重大性能损失的情况下,尽可能以经济高效的方式轻松过渡到 NVMe-oF 的公司而言,由 ADQ 增强的 NVMe/TCP 和 SPDK 是一条富有吸引力、易于部署、具备高性能并且支持日后扩展的路线7。 

与为 Memcached5、开源 Redis4 和 Aerospike 应用6 启用 ADQ 带来的性能提升相似,在添加采用了 ADQ 技术的英特尔® 以太网 800 系列时,采用 SPDK 的 NVMe/TCP 其性能也得到显著提升。

了解更多信息

有关采用了 ADQ 技术的英特尔® 以太网 800 系列的详细信息,请联系英特尔销售代表或经销商,并访问 ADQ 资源中心 (https://www.intel.cn/content/www/cn/zh/architecture-and-technology/ethernet/adq-resource-center.html)。


附录:测试配置

表 3. 测试系统配置

* 为了不在同一个物理内核的线程上调度 fio,出于基准目的而禁用了英特尔® HT 技术。

表 4. 被测系统 (SUT) 网络适配器配置设置

表 5. SUT、客户机操作系统和适配器配置

表 6. SPDK 配置

表 7. Fio 配置