查看原文
其他

给网络工程师解读 NVMe、NVMe over Fabrics 和 RDMA

常华Andy Andy730 2024-03-16

Source: Jerome Tissieres, NVMe, NVMe over Fabrics and RDMA for network engineers, August 4, 2020


以往,对于网络工程师来说,基于网络的存储的发展并不是一个真正的问题:网络速度快,硬盘驱动器速度很慢。自然升级到10Gb、40Gb 和 100Gb的以太网足以满足存储系统的网络需求。


但现在,随着超快SSD和NVMe的推出,情况已不再如此!存储团队现在能够用速度极快的设备使网络饱和。


使用 NVMe 技术的基于网络的存储 (SAN)(称为 NVMe over Fabric(NVMe-oF))给网络带来了重大挑战。网络工程师需要仔细研究这种新一代存储,以了解其中的不同之处,以及它们如何满足真正高速存储的性能要求。


这是专门针对NVMe、NVMe-over-fabric(NVMe-oF) 和远程直接内存访问(RDMA) 的两篇系列文章中的第一篇。第二篇文章是关于融合以太网RDMA(RoCE)以及如何在Cisco Nexus 9k系列上配置。



什么是NVMe?


介绍


这篇文章的目的是对NVMe和NVMe-oF的主要概念进行一般概述,并向您展示您作为网络工程师可能遇到的不同网络结构和协议。


NVMe来自哪里以及它与SCSI有何不同


直到最近,存储系统一直基于硬盘驱动器(HDD)存储介质,带有磁性盘片和磁头,这是60多年历史的技术的合乎逻辑的进步。随着驱动技术随着更快、更小设备的进步,存储行业围绕着使用并行或串行总线连接到HDD的驱动器控制器模型,例如SAS(串行连接SCSI)或SATA(串行ATA)。从磁盘驱动器到总线,从控制器到计算机,这种众所周知且可互操作的技术链在性能方面得到了很好的平衡 —— 只要磁盘驱动器像传统HDD一样工作。


固态硬盘 (SSD) 的引入在存储领域造成了严重的不平衡。突然之间,磁盘驱动器可以提供类似RAM的性能,具有非常低的延迟和超过20 Gbps的传输速率。这些 SSD 驱动器的首次真正商业部署是作为传统存储系统中 HDD 的直接替代品。SSD 提供更高的速度、更低的延迟、更少的热量和更低的功耗。无需重新设计现有的知名且广泛部署的硬件。这对存储行业来说是双赢的。


但是,简单地将 SSD 放入现有存储系统有一个缺点:它不能充分利用底层技术的潜在性能提升。要真正从 SSD 设备的潜力中获益,需要重新思考存储系统连接到服务器的方式。存储供应商尝试了几种专门针对基于SSD的存储设计的方法,而那些在业界最受关注的方法是将存储设备直接连接到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 需求转换为设备功能。

  • 在主机和存储之间创建 1:1 的关系。

  • 适用于单队列模型:一个队列,每个队列最多包含 64 个命令。

然后,机械磁盘驱动器演变为固态驱动器 (SSD) 或闪存:

  • Flash暴露了SCSI的局限性,因为Flash不旋转,没有什么“机械”可以等待的。因此,一个命令/一个队列系统不再有任何延迟时间。

  • 此外 ,闪存需要的命令远远少于SCSI提供的命令。

  • 最后,闪存可以认为就像PCIe RAM一样。这就是NVMe的初始设计。


NVMe

  • NVMe 将存储视为内存。

  • CPU 可以本机与内存通信:无需适配器。

  • 在主机和目标之间创建多对多关系。

  • 适用于多队列模型:64K 队列,每个队列最多 64K 个命令。


总之,我们可以说NVMe允许主机充分利用现代SSD可能的并行度。因此,NVMe 降低了 I/O 开销,并带来了与以前的逻辑设备接口相关的许多性能改进,包括多个长命令队列和更低的延迟。SCSI和其它以前的接口协议是为与速度慢得多的硬盘驱动器一起使用而开发的,其中相对于CPU操作,在请求和数据传输之间存在非常长的延迟,其中数据速度比RAM速度慢得多,并且磁盘旋转和寻道时间会产生进一步的优化要求。



NVMe 定义和规格


您可以在NVM Express组织网站上找到的官方定义:https://nvmexpress.org/ - 以下是摘录:


NVMe 是一种规范,定义了主机软件如何通过PCIe 总线与非易失性内存进行通信。它是所有外形规格(U.2、M.2、AIC、EDSFF)中 PCIe 固态硬盘 (SSD) 的行业标准。NVM Express是技术行业领导者的非营利性联盟,负责定义,管理和营销NVMe技术。除了 NVMe 基本规范之外,该组织还托管其它规范:NVMe over Fabrics (NVMe-oF),用于在网络结构上使用 NVMe 命令,NVMe 管理接口 (NVMe-MI) 用于管理服务器和存储系统中的 NVMe/PCIe SSD。


NVMe 规范是针对 SSD 而开始设计的。它是一种效率更高的接口,提供更低的延迟,并且与串行ATA(SATA)等传统接口相比,SSD的可扩展性更高。规范的第一部分是主机控制接口。NVMe 架构带来了一种新的高性能队列机制,该机制支持 65535 个 I/O 队列,每个队列包含 65535 个命令(称为队列深度或未完成命令数)。队列映射到 CPU 内核,以提供可扩展的性能。NVMe 接口显著减少了内存映射输入/输出命令的数量,并适应在中断或轮询模式下运行的操作系统设备驱动程序,以实现更高的性能和更低的延迟。NVMe 规范还包含操作系统使用的 SSD 命令的主机到设备协议,用于:读取、写入、刷新、TRIM、固件管理、温度、错误等。


NVMe,NVMe-oF 和NVMe-MI规范的当前版本也可以在NVM Express组织网站上找到,这里:https://nvmexpress.org/developers/



NVMe over Fabrics(NVMe-oF)


NVMe协议不仅限于简单地连接服务器内部的本地闪存驱动器,还可以通过网络使用。在此场景中使用时,网络“结构”支持存储和服务器组件之间的任意到任意连接。NVMe over Fabrics(NVMe-oF) 使组织能够创建一个非常高性能的存储网络,其延迟可与直连存储相媲美。因此,可以在需要时在服务器之间共享快速存储设备。将基于结构的 NVMe 视为光纤通道或 iSCSI 上的 SCSI 的替代方案,其优点是延迟更低、I/O 速率更高,生产效率更高。


服务器(或其它主机)通过网络结构直接或间接地与 NVMe 存储通信。如果存储解决方案使用控制器,则控制器通过NVMe-oF (如菊花链)或通过另一个专有或非专有解决方案与其自己的存储目标进行通信。这取决于存储供应商的设计和选择。


NVMe-oF 传输协议


作为网络工程师,您需要了解在数据中心中运行 NVMe-oF 的三个官方传输绑定:


  • 光纤通道 (NVMe/FC) —— NVMe 启动器(主机)具有例如 Broadcom/Emulex 或 Marvell/Cavium/QLogic 主机总线适配器 (HBA) 可以通过专用光纤通道 (FC) 结构或以太网光纤通道 (FCoE) 结构访问 NVMe 目标。光纤通道传输使用 NVMe over FC 协议 (FC-NVMe) 通过 FCP Exchange 将 NVMe“控制平面”包(命令和响应)和“数据平面”数据消息映射到光纤通道帧上。 

  • TCP (NVMe/TCP) —— NVMe 主机和控制器通过交换 NVMe/TCP 协议数据单元(NVMe/TCP H2C 和 C2H PDU)通过 TCP 进行通信。NVMe/TCP PDU 可用于传输 NVMe“控制平面”包(命令和响应)和“数据平面”数据。作为 NVMe/FC,这是一种“仅消息”数据传输。

  • 远程直接内存访问(NVMe/RDMA —— InfiniBand 或以太网网络支持) —— RDMA 是一种主机卸载、主机旁路技术,允许应用程序(包括存储)直接向/从另一个应用程序的内存空间传输数据。支持 RDMA 的以太网网卡 (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 Host Channel Adapter(HCA)(例如Nvidia / Mellanox Connect-X)。正如您可以从上面所写的内容中推断出的那样,网络的链路层协议可以是以太网或InfiniBand。两者都可以传输基于 RDMA 的应用程序。


RDMA 在操作系统 Linux、Windows 和 VMware 上受内置支持。在其它操作系统上,或者对于高级功能,您可能需要下载并安装相关的驱动程序包并进行相应的配置。


基于RDMA的NVMe-oF的类型


现在我们已经看到RDMA是通过网络结构传输NVMe的三个选项之一,让我们看看RDMA的三个变种:


  • InfiniBand:InfiniBand网络架构本身支持RDMA。

  • RoCE (RDMA over Converged Ethernet,发音为“Rocky”):基本上,这是RDMA在以太网网络上的实现。它通过封装以太网上的InfiniBand传输数据包来实现这一点。有两种不同的 RoCE 版本:

    • RoCEv1 – 以太网链路层协议(Ethertype 0x8915),允许在同一以太网广播域中的任何两台主机之间进行通信。因此,仅第 2 层,不可路由。
    • RoCEv2 – 使用 UDP/IP(IPv4 或 IPv6)报头增强 RoCEv1,从而增加了第 3 层 的可路由性。NVMe/RoCEv2 默认使用 UDP 目标端口 4791。
以下是 RoCEv1 和 v2 标头的表示形式(来源维基百科):



  • 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。已经在其数据中心拥有FC网络和交换基础设施的网络工程师可以继续使用这些专用资源作为NVMe-oF的传输。但是,典型的 FC 部署速度为 4、16 或 32 Gbps 可能不足以真正利用 NVMe 设备中提供的性能提升。


  • 共享或融合以太网


  • 仅第 2 层

    • NVMe/FC(FCoE)– 它使用以太网/FC 共享网络基础设施。FCoE 在 IP 层不可路由,并且不使用 RDMA。FCoE 具有与 FC 网络相同的要求和优势,但您在基础结构的共享以太网部分上失去了网络的可预测性。我将在下面讨论网络可预测性。


  • 支持第 3 层

    • NVMe/TCP – 使用具有 TCP/IP 传输的以太网网络,但它不使用 RDMA。NVMe/TCP似乎是最经济的解决方案之一,因为以太网结构比FC基础设施便宜,而且实施起来最简单。由于 NVMe/TCP 是自然可路由的,因此服务器及其存储机架可以通过现有的以太网数据中心网络进行通信,而无需专用的 FC 交换机和 HBA。但是,NVMe / TCP存在缺点:最重要的是它使用服务器的计算能力,而计算能力不再完全可用于运行常见应用程序。CPU 占用最多的 TCP 操作之一是计算每个数据包的奇偶校验代码(校验和)。另一个缺点是,它比其它 NVMe-over-Fabrics 协议在传输中引起更多的延迟。此问题主要是由于需要在流中维护多个数据副本,以避免在路由级别丢失数据包。保持非常低的延迟也非常重要(见下文)。

    • NVMe/iWARP – 使用共享以太网网络和基于 TCP 的 RDMA。

    • NVMe/RoCEv2 – 使用共享以太网网络,并通过 UDP 使用 RDMA。



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


就以太网结构上对有损传输的需求而言,正如我们上面所看到的,RDMA是两个设备之间的存储器到存储器传输机制,因此从理论上讲,它不能容忍任何数据包丢失。但是,由于iWARP基于TCP协议以及NVMe/TCP,它可以容忍传输中的数据包丢弃,然后一些TCP重新传输,因此NVMe/iWARP和NVMe/TCP可以通过有损网络传输。


另一方面,RoCE使用UDP,它不能像TCP那样从确认和重传中受益。此外,从RoCEv2规范来看,您应该使用无损结构。但是,在RoCE协议内部有一种防止数据包丢失的机制:数据包丢弃时,将具有特定数据包序列号(PSN)的NACK控制数据包发送给发送方,以便它重新传输数据包。因此,说RoCE需要无损网络传输(无损以太网)并不完全正确。RoCE可以在无损或有损网络中运行。



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


以下是我从与专家的讨论和技术研讨会中收集的一系列信息。请记住,以下信息可能会根据您的需求而有所不同,并且可能在几个月后已经过时。


  • 专用以太网与共享以太网 – 与共享以太网解决方案相比,使用专用网络 IB 或 FC 的主要缺点是价格。它当然包括维护专用网络本身的需要,但也包括人员及其技能和知识。另一方面,专用网络的最大优势是这种网络是可预测的。您可以确切地知道网络上的内容、预期的流量、延迟等。有时,特别是在存储方面,可预测性比其它任何事情都重要。

  • NVMe/TCP vs iWARP vs RoCEv2 – 与  NVMe/TCP 相比,使用 rNIC 的 RDMA 的卸载功能可以通过减少协议处理开销和昂贵的内存副本来显著提高性能。但是,与所有融合基础架构一样,带宽是关键。没有过度订阅,您需要密切管理和控制入站流量、队列和流量优先级。RoCE更是如此,它不支持(或几乎)任何数据包丢失。

  • 我们可以将目标与主机放置多远 - 由于我们可以进行第3层路由,因此不要认为您可以将存储放在远离服务器的地方,例如通过企业WAN链路。不,一般来说,我们尽量让目标离主机尽可能近。NVMe 具有非常严格的端到端延迟要求,除非网络基础结构专门设计为提供非常低的延迟,否则 NVMe 可能无法正常运行。

  • 什么是可接受的延迟 – 每个应用程序、数据库或心跳协议都有已知的延迟或 RTT 预算。您应该基于此提出问题:您使用的是哪种协议以及延迟要求是什么。最重要的是,如上所述,我们尝试使目标尽可能靠近主机。

  • 存储结构的第 2 层与第 3 层 – 根据一些存储专家的说法,存储(尤其是块存储)的最佳实践不是路由流量,这主要是因为延迟原因。然而,今天的现代数据中心网络不再基于第2层(STP + MLAG),而是基于具有覆盖层(VXLAN或类似)层的第3层底层。因此,这句话有点矛盾。

继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存