过去,基于网络的存储的发展对网络工程师来说并不是真正的问题:网络速度很快,而旋转的硬盘驱动器很慢。自然网络升级到 10Gb、40Gb 和 100Gb 以太网足以满足存储系统的网络需求。
但现在,随着超高速固态磁盘 (SSD) 和非易失性内存高速 (NVMe) 的推出,这不再是真的!存储团队现在有能力使用速度极快的设备潜在地使网络饱和。
使用 NVMe 技术(称为 NVMe over Fabric (NVMe-oF))网络存储 (SAN) 对网络提出了重大挑战。网络工程师需要仔细研究这一新一代存储,以了解它们有何不同,以及它们如何满足真正高速存储的性能要求。
这是两个专门针对非易失性内存快速 (NVMe)、NVMe-over-fabric (NVMe-oF) 和远程直接内存访问 (RDMA) 的系列文章中的第一篇。可以在此处找到关于融合以太网 (RoCE) 和 RDMA 以及如何在 Cisco Nexus 9k 系列上配置 RoCEv2 的第二篇文章。
1 什么是 NVMe?
1.1 介绍
这篇文章的目的是对 NVMe 和 NVMe-oF 的主要概念进行一般性概述,并向您展示作为网络工程师可能遇到的不同网络结构和协议。我不假装在这里详细解释 NVMe 和 NVMe-oF 的所有规格。如果您想了解有关 NVMe 的更多信息,我在本文末尾放置了一系列您应该感兴趣的链接。
1.2 NVMe 的来源以及它与 SCSI 的区别
直到最近,存储系统一直基于硬盘驱动器 (HDD) 旋转介质,带有磁盘和移动磁头,这是 60 多年前技术的逻辑发展。随着驱动器技术随着更快和更小设备的进步,存储行业围绕使用并行或串行总线(例如 SAS(串行连接 SCSI)或 SATA(串行 ATA))连接到 HDD 的驱动器控制器模型合并。这种从磁盘驱动器到总线到控制器再到计算机的著名且可互操作的技术链在性能方面非常平衡——只要磁盘驱动器像传统的 HDD 一样工作。
固态驱动器 (SSD) 的引入在存储领域造成了严重的不平衡。突然之间,磁盘驱动器可以提供类似 RAM 的性能,具有非常低的延迟和超过 20 Gbps 的传输速率。这些 SSD 驱动器的第一次真正商业部署是作为传统存储系统中 HDD 的直接替代品。SSD 提供更高的速度、更低的延迟、更少的热量和更少的功耗。并且无需重新设计现有的知名且广泛部署的硬件。它们对存储行业来说是双赢的。
然而,简单地将 SSD 放入现有存储系统中存在一个缺点:它没有充分利用底层技术潜在的性能提升。要真正从 SSD 设备的潜力中受益,需要重新考虑存储系统连接到服务器的方式。存储供应商在专门为基于 SSD 的存储进行设计时尝试了多种方法,其中最受业界关注的方法是将存储设备直接连接到 PCI Express (PCIe) 总线。在构建了多个专有设备之后,存储和服务器行业在 2011 年联合起来创建了 NVMe:非易失性内存 Express。
NVMe 是一种协议,而不是形式因素或接口规范。NVMe 与其他存储协议不同,因为它将 SSD 设备视为内存而不是硬盘驱动器。NVMe 协议从一开始就设计为通过 PCIe 接口使用,因此几乎直接连接到服务器的 CPU 和内存子系统。在多核环境中,NVMe 效率更高,因为它允许每个核独立地与存储系统通信。随着 NVMe 中的更多队列和更深的队列深度,多个 CPU 内核可以使 SSD 保持忙碌状态,甚至消除内部性能瓶颈。NVMe 是一种 NUMA 感知协议,利用了较新 CPU 中内存子系统设计的进步。
1.3 从 SCSI 到 NVMe,简而言之
1.3.1 SCSI
SCSI 将存储视为设备(磁带驱动器、磁盘驱动器、扫描仪等)
需要一个“说”SCSI 的适配器将 CPU 需求转换为设备功能。
在主机和存储之间创建 1:1 的关系。
在单队列模型中工作:一个单队列,每个队列最多 64 个命令。
然后,机械磁盘驱动器演变为固态驱动器 (SSD) 或闪存:
Flash 暴露了 SCSI 的局限性,因为 flash 不旋转,没有什么“机械”可以等待。因此,一个命令/一个队列系统不再有任何延迟时间。
此外,闪存所需的命令也比 SCSI 提供的要少得多。
最后,可以认为闪存就像是 PCIe RAM。这就是 NVMe 的由来。
1.3.2 NVMe
NVMe 将存储视为内存。
CPU 可以本机与内存通信:不需要适配器。
在主机和目标之间创建多对多关系
在多队列模型中工作:64K 队列,每个队列最多 64K 条命令。
总之,我们可以说 NVMe 允许主机充分利用现代 SSD 可能实现的并行度。因此,NVMe 减少了 I/O 开销,并相对于以前的逻辑设备接口带来了许多性能改进,包括多个长命令队列和减少延迟。SCSI 和其他以前的接口协议是为速度慢得多的硬盘驱动器开发的,其中相对于 CPU 操作而言,请求和数据传输之间存在非常长的延迟,其中数据速度远低于 RAM 速度,并且磁盘旋转和寻道时间引起进一步的优化要求。
1.4 NVMe 定义和规范
可以在 NVM Express 组织网站上找到官方定义:https ://nvmexpress.org/——以下是摘录:
NVM Express (NVMe) 是一种规范,它定义了主机软件如何通过 PCI Express (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 架构带来了一种全新的高性能队列机制,支持 65,535 个 I/O 队列,每个队列有 65,535 条命令(称为队列深度,或未完成命令的数量)。队列映射到提供可扩展性能的 CPU 内核。NVMe 接口显着减少了内存映射输入/输出命令的数量,并适应在中断或轮询模式下运行的操作系统设备驱动程序,以实现更高的性能和更低的延迟。
然后,NVMe、NVMe-oF 和 NVMe-MI 规范的当前版本也可以在 NVM Express 组织站点上找到,这里:https ://nvmexpress.org/developers/
2 NVMe over Fabrics (NVMe-oF)
NVMe 协议不仅限于简单地连接服务器内部的本地闪存驱动器,它还可以通过网络使用。在这种情况下使用时,网络“结构”支持存储和服务器元素之间的任意连接。NVMe over Fabrics (NVMe-oF) 使组织能够创建具有可与直连存储相媲美的延迟的高性能存储网络。因此,可以在需要时在服务器之间共享快速存储设备。将 NVMe over fabric 视为光纤通道上的 SCSI 或 iSCSI 的替代方案,具有更低的延迟、更高的 I/O 速率和更高的生产力。
服务器(或其他主机)通过网络结构直接或间接通过控制器与 NVMe 存储通信。如果存储解决方案使用控制器,则控制器通过 NVMe-oF(如菊花链/daisy-chain)或通过其他专有或非专有解决方案与其自己的存储目标通信。这取决于存储供应商的实施和选择。
2.1 NVMe-oF 传输协议
作为网络工程师,您需要了解三种官方传输绑定才能在您的数据中心运行 NVMe-oF:
光纤通道 (NVMe/FC) – NVMe 启动器(主机)与例如 Broadcom/Emulex 或 Marvell/Cavium/QLogic 主机总线适配器 (HBA) 可以通过专用光纤通道 (FC) 结构或以太网光纤通道 (FCoE) 访问 NVMe 目标) 织物。光纤通道传输使用 NVMe over FC 协议 (FC-NVMe) 通过 FCP 交换将 NVMe“控制平面”胶囊(命令和响应)和“数据平面”数据消息映射到光纤通道帧。
TCP (NVMe/TCP) – NVMe 主机和控制器通过交换 NVMe/TCP 协议数据单元(NVMe/TCP H2C 和 C2H PDU)通过 TCP 进行通信。NVMe/TCP PDU 可用于传输 NVMe“控制平面”封装(命令和响应)和“数据平面”数据。作为 NVMe/FC,这是“仅消息”数据传输。
远程直接内存访问(NVMe/RDMA——在 InfiniBand 或以太网网络上支持) ——RDMA 是一种主机卸载、主机旁路技术,它允许包括存储在内的应用程序直接与另一个应用程序的内存空间进行数据传输。InfiniBand 世界中支持 RDMA 的以太网 NIC (rNIC) 或 HCA(而不是主机)管理 NVMe 源和目标之间的可靠连接。使用 RDMA,NVMe“控制平面”胶囊(命令和响应)使用消息传输,“数据平面”(数据)使用 RDMA 读/写操作等内存语义传输。您必须查看数据平面部分,例如 PCIe 直接内存操作。
除了这三个“官方”解决方案之外,还有其他专有解决方案允许您在网络结构之上使用 NVMe 命令。这没有什么问题,它们只是没有标准化。
2.2 基于 RDMA 的 NVMe-oF
2.2.1 什么是 RDMA?
直接内存访问 (DMA) 是设备直接访问主机内存的能力,无需 CPU 的干预。然后,远程直接内存访问 (RDMA) 是在不中断该系统上 CPU 处理的情况下访问(读取、写入)远程计算机上的内存的能力。
2.2.2 RDMA 主要优势
零拷贝——应用程序可以在不涉及网络软件堆栈的情况下执行数据传输。数据直接发送和接收到缓冲区,而无需在网络层之间复制。
内核绕过——应用程序可以直接从用户空间执行数据传输,而无需内核参与。
无需 CPU 参与——应用程序可以访问远程内存,而无需在远程服务器中消耗任何 CPU 时间。远程内存服务器将被读取,而无需远程进程(或处理器)的任何干预。而且,远程CPU的缓存不会被访问的内存内容填满。
2.2.3 如何使用 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。在其他操作系统上,或者对于高级功能,您可能需要下载并安装相关的驱动程序包并进行相应的配置。
2.2.4 各种基于 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 报头的表示(来源 Wikipedia):
iWARP(互联网广域 RDMA 协议) ——基于 IETF 标准的拥塞感知协议,例如 TCP 和 SCTP。具有卸载的 TCP/IP 流量控制和管理。
即使 iWARP 和 RoCE 都使用相同的 RDMA 软件动词和相同类型的以太网 RDMA-NIC (rNIC),由于第 3 层/第 4 层的差异,它们无法相互通信 RDMA。今天,RoCEv2 似乎是最受欢迎的供应商选项。
2.3 NVMe-oF 网络要求
2.3.1 协议要求
根据我们上面看到的情况,根据选择的 NVMe-oF 解决方案有不同的要求:
专用网络
NVMe/IB – 通过 InfiniBand 网络使用 RDMA。在高性能计算 (HPC) 领域非常流行。除非您在该领域或股票市场工作,否则您的数据中心可能没有 InfiniBand 网络。
NVMe/FC – 需要第 5 代或第 6 代光纤通道网络。它不使用 RDMA。已经在其数据中心拥有 FC 网络和交换基础设施的网络工程师可以继续使用这些专用资源作为 NVMe-oF 的传输。但是,4、16 或 32 Gbps 的典型 FC 部署速度可能不足以真正利用 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。
2.3.2 传输要求:有损与无损传输
就以太网结构上的有损与无损传输的需求而言,正如我们在上面看到的,RDMA 是两个设备之间的内存到内存传输机制,因此理论上它不能容忍任何数据包丢失。但是,由于 iWARP 基于 TCP 协议(以及 NVMe/TCP),它可以容忍传输中的数据包丢失以及一些 TCP 重传,因此 NVMe/iWARP 和 NVMe/TCP 可以通过有损网络进行传输。
另一方面,RoCE 使用 UDP,它不能像 TCP 那样从确认和重传中受益。此外,从 RoCEv2 规范来看,您应该使用无损结构。但是,在 RoCE 协议内部有一种防止数据包丢失的机制:在数据包丢失时,将具有特定数据包序列号 (PSN) 的 NACK 控制数据包发送给发送方,以便它重新传输数据包。因此,说 RoCE 需要无损网络传输(无损以太网)并不完全正确。RoCE 可以在无损或有损网络中运行。
2.3.3 有关 NVMe-oF 的其他网络信息
这是我从与专家的讨论和技术研讨会中收集到的一系列信息。请记住,以下信息可能会根据您的需要而有所不同,并且可能在几个月后就已经过时了。
专用与共享以太网——与共享以太网解决方案相比,使用专用网络(IB 或 FC)的主要缺点是价格。它当然包括维护专用网络本身的需要,还包括人员及其技能和知识。另一方面,专用网络的最大优势是该网络是可预测的。您确切地知道网络上的内容、预期流量、延迟等。有时,尤其是在存储方面,可预测性比其他任何事情都更重要。
NVMe/TCP 与 iWARP 与 RoCEv2 - 与 NVMe/TCP相比,使用 rNIC 的 RDMA 卸载功能可以通过减少协议处理开销和昂贵的内存副本来显着提升性能。但是,与所有融合基础设施一样,带宽是关键。没有超额订阅,您需要密切管理和控制入站流量、队列和流量优先级。RoCE 更是如此,它不支持(或几乎)任何数据包丢失。
我们可以将我们的目标与我们的主机相距多远——因为我们可以进行第 3 层路由,所以不要认为您可以将存储远离服务器,例如通过企业 WAN 链接。不,一般来说,我们会尽量让目标远离主机。NVMe 具有非常严格的端到端延迟要求,除非网络基础设施专门设计用于提供非常低的延迟,否则 NVMe 可能无法正常运行。
什么是可接受的延迟——每个应用程序、数据库或核心位协议都有一个已知的延迟或 RTT 预算。您的问题应该基于此:您使用的是什么协议以及延迟要求是什么。最重要的是,如上所述,我们尝试使目标尽可能靠近主机。
存储结构的第 2 层与第 3 层——根据一些存储专家的说法,存储(尤其是块存储)的最佳实践不是路由流量,主要是因为延迟原因。然而,今天的现代数据中心网络不再基于第 2 层(STP + MLAG),而是基于具有覆盖(VXLAN 或类似)层的第 3 层底层。所以这句话有点自相矛盾。
如果在这篇文章之后你问自己这样的问题:“我应该建立一个专用的存储网络还是使用融合以太网?”或“在以太网上,我应该使用 NVMe/TCP 还是 NVMe/RDMA,然后使用 RoCEv1、RoCEv2 和 iWARP?” 和“延迟、扩展怎么样?”
我建议您查看 J Metz 博士关于 Cisco Live 的会议:NVMe over Fabrics (NVMe-oF) 的网络影响 – BRKDCN-2729
3 基于融合以太网的 RDMA (RoCE)
编辑:黄飞
评论
查看更多