编者荐语:

近期,我们发布了分布式块存储产品的最新版本——SMTX ZBS 5.0。通过在业内率先引入英特尔傲腾持久内存、NVMe-oF、25GbE/100GbE 及 RDMA 等先进的软硬件技术,实现了业界领先的性能与低时延。对于其中的网络技术,希望通过本文帮助大家了解部分内容。

文章来源:AboutNetworks.net

作者:Jerome Tissieres

曾几何时,对于基础架构工程师而言,基于网络的存储器革新并不会构成真正的问题:因为网速很快,硬盘驱动器转速很慢。自然网络只要升级至 10Gb、40Gb 和 100Gb 以太网,满足存储系统的联网需求就绰绰有余了。

但现如今,随着超快固态硬盘 (SSD) 和高速非易失性内存 (Non-Volatile Memory Express, NVMe) 的问世,形势已全盘颠覆。存储团队现在拥有的设备速度非常快,不消片刻就能令网络达到饱和。

基于网络的存储器 (SAN) 使用基于架构的非易失性内存 (NVMe over Fabric, NVMe-oF) 这一技术,给网络带来了巨大的挑战。基础架构工程师需要仔细了解这种新一代存储器,理解它与前几代存储器的差异,以及这些存储器如何满足真正高速的存储器的性能需求。

何谓 NVMe?

NVMe 的来源以及与 SCSI 的区别

原先存储系统的基础是硬盘驱动器 (HDD) 旋转介质,其中有磁盘和持续移动的磁头,这项技术历经 60 余年沉淀发展而成,直至最近才彻底改变。随着设备尺寸越来越小且速度越来越快,驱动器技术不断演变,存储器行业围绕驱动器控制器模型逐渐融合,这种控制器使用并行总线或串行总线(如串行连接 SCSI “SAS” 或串行 ATA “SATA”)连接到 HDD。这种广为人知的可互操作技术链始于磁盘驱动器,按顺序连接到总线、控制器再到计算机,形成了性能平衡,前提是磁盘驱动器工作方式与传统 HDD 相似。

而固态驱动器 (SSD) 的问世彻底打破了存储器世界的这种平衡。突然之间,磁盘驱动器可以提供媲美 RAM 的性能,时延极短且传输速率超过 20 Gbps。这类 SSD 驱动器以传统存储系统中 HDD 的完美替代品的身份,实现了第一次真正的商用部署。SSD 速度更快、时延更低、发热更少且功耗更低,并且无需对广泛部署的现有硬件进行重新设计。对于存储行业而言,这意味着双赢。
但将 SSD 直接插入现有存储系统有一个缺点:它无法充分发挥出底层技术的性能提升潜力。为了真正发挥 SSD 设备的全部潜力,我们需要重新审视存储系统连接到服务器的方式。存储器供应商几经尝试,为基于 SSD 的存储器专门设计了多种方法,其中直连 PCI Express (PCIe) 总线的设计在业内引发热议。在构建多项专属设备后,存储器和服务器行业于 2011 年联手打造出了 NVMe。

NVMe 是一种协议,而并非外形规格或接口规范。NVMe 不同于其他存储协议,因为它对 SSD 设备的处理方式不同于硬盘处理方式,而更接近于内存。NVMe 协议的设计从一开始就以搭配 PCIe 接口使用为目标,因此几乎直接连接到服务器的 CPU 和内存子系统。

在多核环境内,NVMe 甚至更高效,因为它允许每个核心独立与存储系统进行交互。随着 NVMe 内队列数量和深度的双双增加,多核 CPU 能够使 SSD 保持忙碌状态,因此连性能的内部瓶颈也荡然无存。NVMe 属于非统一内存体系结构 (NUMA) 感知协议,能够充分发挥新型 CPU 中的内存子系统设计的发展成果。总之,相比使用 SATA 或 SAS 的 SSD,具有 SSD 和 NVMe 协议的存储器能够显著提升每秒输入输出 (IOPS) 并大大降低时延。

从 SCSI 到 NVMe 的发展历程简介


SCSI

  • SCSI 将存储器作为设备来处理,这些设备包括磁带机、磁盘驱动器、扫描仪等。
  • 需要支持 SCSI 的适配器将 CPU 的意图“翻译”为设备功能。
  • 在主机与存储器之间创建一对一关系。
  • 在单一队列模型中运行:单一队列中最多包含 64 条命令。

随后,机械硬盘演变为固态硬盘 (SSD) 或闪存:

  • 闪存将 SCSI 的短板暴露无遗,因为闪存并不旋转,不需要等待“机械”操作。因此,单命令/单队列系统中不再有时延,也就是滞后时间。
  • 不仅如此,闪存所需的命令数量也远少于 SCSI 所提供的命令数量。
  • 最终结果就是,闪存可以视为与 PCIe RAM 类似。NVMe 也正是由此而来。

NVMe

  • NVMe 将存储器作为内存来处理。
  • CPU 可以在内部与内存进行通信:无需适配器。
  • 在主机与目标之间创建多对多关系。
  • 能够在多队列模型中运行:64000 个队列,每个队列最多 64000 条命令。

总之,可以说 NVMe 能够将现代化 SSD 允许的并行度发挥到极致。因此 NVMe 能够减少 I/O 开销,将先前逻辑设备接口相关的性能提升落到实处,包括支持多个长命令队列和降低时延。

SCSI 和其他先前的接口协议是围绕搭配硬盘驱动器使用而开发的,这些硬盘驱动器速度远低于 NVMe,并且在请求和数据传输之间存在着冗长的延迟(相对于 CPU 操作),其数据速度远低于 RAM 速度,再加上磁盘旋转和寻道时间,从而引发了进一步优化的需求。

NVMe 的定义与规范

您可在 NVM Express 组织官网上找到高速非易失性内存的官方定义,这里摘抄一段:

NVM Express™ (NVMe™) 规范旨在定义主机软件与整个 PCI Express® (PCIe®) 总线上的非易失性内存进行通信的方式。它是适用于各种 PCIe 固态硬盘 (SSD) 的业界标准,这些 PCIe SSD 具有多种不同外形规格(U.2、M.2、AIC 和 EDSFF)。NVM Express 是由技术行业领导者组成的非营利性联盟,负责 NVMe 技术的定义、管理和市场推广。

除了 NVMe 基本规范外,该组织还负责其他几项规范:NVMe over Fabrics (NVMe-oF™) 和 NVMe Management Interface (NVMe-MI™),前者基于网络连接架构使用 NVMe 命令,后者则用于在服务器与存储系统中管理 NVMe/PCIe SSD。

NVMe 规范是从零开始专为 SSD 而设计的规范。它是更高效的接口,相比于串行 ATA (SATA) 之类的传统接口,它能够为 SSD 提供更低的时延和更高的可扩展性。此规范的第一部分对应的是主机控制接口。NVMe 体系结构引入了全新的高性能排队机制,支持 65,535 个 I/O 队列,每个队列含 65,535 条命令(称为队列深度或者未完成命令数)。队列映射到 CPU 核心,提供可扩展的性能。

NVMe 接口显著减少了存储器映射输入/输出命令的数量,并且能够调整操作系统设备驱动程序,使其在中断模式或轮询模式下运行,从而提升性能并降低时延。NVMe 规范还包含适用于 SSD 命令的主机到设备协议,供操作系统用于:读取、写入、清空、TRIM、固件管理、温控、报错等操作。
如需获取最新版本的 NVMe、NVMe-oF 和 NVMe-MI 规范,可访问 NVM Express 组织官网。

基于架构的非易失性内存 (NVMe-oF)

NVMe 协议并非局限于在服务器内部连接本地闪存驱动器,它还可通过网络使用。在网络环境内使用时,网络“架构”支持在存储器与服务器各元素之间建立任意对任意连接。NVMe-oF 支持企业创建超高性能存储网络,其时延能够比肩直接连接的存储器。因而可在服务器之间按需共享快速存储设备。NVMe-oF 可视为基于光纤通道的 SCSI 或 iSCSI 的替代品,其优势在于时延更低、I/O 速率更高,且生产力更优。

服务器(或其他主机)通过网络架构与 NVMe 存储器直接进行通信,或者通过控制器与之进行间接通信。如果存储器解决方案使用控制器,那么控制器就会与自己的存储器目标进行通信,可采用的方式包括 NVMe-oF(如菊花链)或者其他专属或非专属解决方案。这取决于存储器供应商的实现方法和选择。

NVMe-oF 传输协议

基础架构工程师需要了解以下三种传输绑定,才能在自己的数据中心内操作

nvme_nvme_rdma.jpg

NVMe-oF:
光纤通道 (NVMe/FC):具有 Broadcom / Emulex 或 Marvell / Cavium / QLogic 主机总线适配器 (HBA) 等设备的 NVMe 发起方(主机)可以通过专属光纤通道 (FC) 架构或者基于以太网的光纤通道 (FCoE) 架构来访问 NVMe 目标。光纤通道传输通过 FCP Exchange 使用基于光纤通道协议的 NVMe (FC-NVMe),将 NVMe 的“控制平面”封装体(命令和响应)和“数据平面”数据消息映射到光纤通道帧。

TCP (NVMe/TCP):NVMe 主机和控制器以交换 NVMe/TCP 协议数据单元(NVMe/TCP H2C 和 C2H PDU)的方式,通过 TCP 进行通信。NVMe/TCP PDU 可用于传输 NVMe 的“控制平面”封装体(命令和响应)和“数据平面”数据。对于 NVMe/FC,这种数据传输“仅含消息”。

远程直接内存访问(InfiniBand 或以太网网络上支持的 NVMe/RDMA):RDMA 是主机卸载、主机旁路技术,支持包括存储器在内的应用程序与另一个应用程序的存储空间之间直接执行双向往来数据传输。支持 RDMA 的以太网 NIC (rNIC) 或者 InfiniBand 领域内的 HCA(不包括主机)均负责管理 NVMe 源与目标之间的可靠连接。凭借 RDMA,即可使用消息来传输 NVMe“控制平面”封装体(命令和响应),并使用存储器语义(如 RDMA 读/写操作)来传输“数据平面”(数据)。您必须将数据平面部分视为类似 PCIe 的直接内存操作。

除了这三种解决方案外,还有其他专属解决方案可以让您在网络架构基础上使用 NVMe 命令。

基于RDMA 的 NVMe-oF

何谓 RDMA?

直接内存访问 (DMA) 指设备无需 CPU 干预即可直接访问主机内存的能力。远程直接内存访问 (RDMA) 也就是在不中断远程机器系统 CPU 处理的情况下对该机器上的内存执行访问(读取和写入)的能力。

RDMA 主要优势

  • 零复制:应用程序无需网络软件栈的参与即可执行数据传输。数据可以直接发送和接收到缓冲区,无需在网络层之间复制。
  • 内核旁路:应用程序可以直接从用户空间执行数据传输,无需内核参与。
  • 无 CPU 参与:应用程序无需在远程服务器内耗用任何 CPU 时间即可访问远程内存。无需任何远程进程(或处理器)的干预即可读取远程内存服务器。此外,远程 CPU 的高速缓存不会被访问的内存内容填满。

如何使用 RDMA?

要使用 RDMA,需要具备 RDMA 功能的网络适配器:支持 RDMA 的以太网 NIC (rNIC),如 Broadcom NetXtreme E 系列、Marvell / Cavium FastLinQ 或 Nvidia / Mellanox Connect-X 系列。或者 InfiniBand 领域内的 InfiniBand 主机通道适配器 (HCA)(同样以 Nvidia / Mellanox Connect-X 为例)。由此您可能已经推断出,网络的链路层协议既可以是以太网,也可以是 InfiniBand。这两种协议均可用于传输基于 RDMA 的应用程序。

在 Linux、Windows 和 VMware 这三种操作系统内置 RDMA 支持功能。在其他操作系统上,或者需要使用高级功能时,您可能需要下载并安装相关的驱动程序包并对其进行正确配置。

基于 RDMA 的 NVMe-oF 的种类

现在我们已经知道,RDMA 是用于通过网络架构传输 NVMe 的三种选项之一,接下来,我们来看看 RDMA 的三种类型:

1. InfiniBand:InfiniBand 网络架构原生支持 RDMA。

2. RoCE(基于聚合以太网的 RDMA,读作“Rocky”):这种类型基本上就是基于以太网网络的 RDMA 的实现。其方式是通过以太网来封装 InfiniBand 传输包。RoCE 有两种版本:

RoCEv1:以太网链路层协议(以太网 0x8915),支持在相同以太网广播域内任意两个主机之间进行通信。因此,仅限第 2 层网络,不可路由。

RoCEv2:利用 UDP/IP(IPv4 或 IPv6)报头增强 RoCEv1,因此增加了第 3 层网络可路由性。NVMe/RoCEv2 默认使用 UDP 目标端口  4791。

3. iWARP(互联网广域 RDMA 协议):按 IETF 标准拥塞感知协议(如 TCP 和 SCTP)分层。具有卸载 TCP/IP 流量控制和管理功能。

即使 iWARP 和 RoCE 都使用相同的 RDMA 软件谓词和同类以太网 RDMA-NIC (rNIC),由于第 3 层/第 4 层网络之间存在的差异,两者之间仍无法以 RDMA 来通信。现如今,RoCEv2 是供应商最常用的选择。

NVMe-oF 网络要求

协议要求

如上所述,根据所选 NVMe-oF 解决方案,要求不尽相同:

专用网络

  • NVMe/IB:使用基于 InfiniBand 网络的 RDMA。在高性能计算 (HPC) 领域颇受欢迎。除非您在该领域或者股票市场工作,否则您的数据中心可能没有 InfiniBand 网络。
  • NVMe/FC:需要第 5 代或第 6 代光纤通道网络。它不使用 RDMA。如果数据中心内已有光纤通道网络或交换基础架构,那么基础架构工程师可以继续使用这些专用资源作为 NVMe-oF 的传输方式。但是,传统 4、16 或 32 Gbps 光纤通道部署速度可能不足以真正发挥出 NVMe 设备的性能提升。
共享或聚合以太网网络
  • 仅限第 2 层网络
    NVMe/FC(含 FCoE):它使用以太网/光纤通道共享网络基础架构。FCoE 在 IP 层不可路由,并且不使用 RDMA。FCoE 与光纤通道网络具有相同的要求和优势,但在基础架构的共享以太网部分中失去了网络可预测性。
  • 支持第 3 层网络
    NVMe/TCP
    :使用具有 TCP/IP 传输的以太网网络,但不使用 RDMA。一般认为 NVMe/TCP 是最经济实惠的解决方案,因为以太网网络架构比光纤通道基础架构更实惠,且实现难度最低。由于 NVMe/TCP 原生可路由,因此服务器与其存储器托架之间能够通过现有以太网数据中心网络进行通信,而无需专用光纤通道交换机和 HBA。但 NVMe/TCP 存在如下劣势:最重要的是它使用服务器的算力,这样一来服务器算力就无法全部用于运行常见应用程序。CPU 密集度最高的 TCP 操作之一是计算每个数据包的奇偶校验码(校验和)。另一个劣势则是其传输过程中时延比其他 NVMe-oF 协议更长。产生这个问题主要是因为在此流程中需要维护多个数据副本,以免在路由级别发生数据包丢失。
    NVMe/iWARP:使用共享以太网网络和基于 TCP 的 RDMA
    NVMe/RoCEv2:使用共享以太网网络和基于 UDP 的 RDMA。

传输要求:有损传输 vs 无损传输

如上文所述,在以太网架构中,就有损传输与无损传输两种需求而言,RDMA 是两个设备之间的内存到内存传输机制,因此理论上它不能容许任何丢包。但由于 iWARP 基于 TCP 协议和 NVMe/TCP,它可以容许在传输中发生丢包,随后执行少量 TCP 重新传输,因此 NVMe/iWARP 和 NVMe/TCP 均可通过有损网络来传输。

而另一方面,RoCE 则使用 UDP,因此无法像 TCP 那样通过应答和重新传输来获益。此外,根据 RoCEv2 规范,应该使用无损架构。但在 RoCE 协议内部存在一种防范丢包的机制:发生丢包时,将把具有特定数据包序号 (PSN) 的 NACK 控制包发送给发送方,以供发送方重新发送该数据包。因此,所谓 RoCE 要求无损网络传输(无损以太网)的说法并不完全正确。RoCE 可以在无损网络或有损网络中运行。

有关 NVMe-oF 的其他网络信息

以下信息是作者与专家讨论及参与各种技术研讨会收集得来,因个人需求而异,且不一定长期有效。

专用以太网 vs 共享以太网
:相比共享以太网解决方案,使用专用网络(IB 或 FC)的主要劣势在于价格。当然,这其中也包括专用网络本身的维护费用以及由具备相应知识技能的人员参与维护所产生的人力成本。另一方面,专用网络的巨大优势在于此网络是可预测的。基础架构工程师对于自己网络中包含的内容、预计的流量、时延等都了如指掌。有时,可预测性比什么都重要,尤其是就存储而言。

NVMe/TCP、iWARP 和 RoCEv2 之间的比较
:相比 NVMe/TCP,RDMA 使用 rNIC 进行卸载的功能可以减少协议处理开销和昂贵的内存备份数量,因此能显著提升性能。但就像所有聚合基础架构一样,带宽才是关键。由于没有超额预订,需要对入站流量、队列和流量优先顺序严加管控。对于 RoCE 更是如此,因为它不支持(或者说几乎不支持)任何丢包。

目标与主机之间最大距离是多少
:举例来说,虽然我们可以通过企业 WAN 链路等方式来执行第 3 层网络路由,但切勿认为可以将存储器置于远离服务器的位置。这是不行的,一般来说,我们尝试把目标尽可能置于靠近主机的位置。NVMe 具有非常严格的端到端时延要求,除非网络基础架构是专为提供超低时延而设计,否则 NVMe 可能无法正常工作。如何定义可接受的时延:每个应用程序、数据库或脉动协议都有已知的时延或 RTT 预算。用户问题应该基于以下要素:当前使用哪一种协议,又有怎样的时延要求。在此基础上,如上所述,我们尝试把目标尽可能置于靠近主机的位置。

存储架构的第 2 层网络和第 3 层网络对比:某些存储专家认为,存储的最佳实践是避免进行流量路由,对块存储而言尤其如此,这背后主要的原因就是时延。但如今的现代化数据中心网络不再基于第 2 层网络 (STP + MLAG),而是基于第 3 层网络作为底层,并具有覆盖层(VXLAN 或类似网络层)。因此,这句话可能显得有些自相矛盾。