一文了解 NVMe、NVMe-oF 和 RDMA|技术科普
编者荐语:
近期,我们发布了分布式块存储产品的最新版本——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) 这一技术,给网络带来了巨大的挑战。基础架构工程师需要仔细了解这种新一代存储器,理解它与前几代存储器的差异,以及这些存储器如何满足真正高速的存储器的性能需求。
从 SCSI 到 NVMe 的发展历程简介
SCSI
SCSI 将存储器作为设备来处理,这些设备包括磁带机、磁盘驱动器、扫描仪等。
需要支持 SCSI 的适配器将 CPU 的意图“翻译”为设备功能。
在主机与存储器之间创建一对一关系。
在单一队列模型中运行:单一队列中最多包含 64 条命令。
随后,机械硬盘演变为固态硬盘 (SSD) 或闪存:
闪存将 SCSI 的短板暴露无遗,因为闪存并不旋转,不需要等待“机械”操作。因此,单命令/单队列系统中不再有时延,也就是滞后时间。 不仅如此,闪存所需的命令数量也远少于 SCSI 所提供的命令数量。 最终结果就是,闪存可以视为与 PCIe RAM 类似。NVMe 也正是由此而来。
NVMe
NVMe 将存储器作为内存来处理。 CPU 可以在内部与内存进行通信:无需适配器。 在主机与目标之间创建多对多关系。
能够在多队列模型中运行:64000 个队列,每个队列最多 64000 条命令。
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/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 的直接内存操作。
零复制:应用程序无需网络软件栈的参与即可执行数据传输。数据可以直接发送和接收到缓冲区,无需在网络层之间复制。 内核旁路:应用程序可以直接从用户空间执行数据传输,无需内核参与。 无 CPU 参与:应用程序无需在远程服务器内耗用任何 CPU 时间即可访问远程内存。无需任何远程进程(或处理器)的干预即可读取远程内存服务器。此外,远程 CPU 的高速缓存不会被访问的内存内容填满。
如何使用 RDMA?
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/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 共享以太网:相比共享以太网解决方案,使用专用网络(IB 或 FC)的主要劣势在于价格。当然,这其中也包括专用网络本身的维护费用以及由具备相应知识技能的人员参与维护所产生的人力成本。另一方面,专用网络的巨大优势在于此网络是可预测的。基础架构工程师对于自己网络中包含的内容、预计的流量、时延等都了如指掌。有时,可预测性比什么都重要,尤其是就存储而言。 NVMe/TCP、iWARP 和 RoCEv2 之间的比较:相比 NVMe/TCP,RDMA 使用 rNIC 进行卸载的功能可以减少协议处理开销和昂贵的内存备份数量,因此能显著提升性能。但就像所有聚合基础架构一样,带宽才是关键。由于没有超额预订,需要对入站流量、队列和流量优先顺序严加管控。对于 RoCE 更是如此,因为它不支持(或者说几乎不支持)任何丢包。 目标与主机之间最大距离是多少:举例来说,虽然我们可以通过企业 WAN 链路等方式来执行第 3 层网络路由,但切勿认为可以将存储器置于远离服务器的位置。这是不行的,一般来说,我们尝试把目标尽可能置于靠近主机的位置。NVMe 具有非常严格的端到端时延要求,除非网络基础架构是专为提供超低时延而设计,否则 NVMe 可能无法正常工作。如何定义可接受的时延:每个应用程序、数据库或脉动协议都有已知的时延或 RTT 预算。用户问题应该基于以下要素:当前使用哪一种协议,又有怎样的时延要求。在此基础上,如上所述,我们尝试把目标尽可能置于靠近主机的位置。 存储架构的第 2 层网络和第 3 层网络对比:某些存储专家认为,存储的最佳实践是避免进行流量路由,对块存储而言尤其如此,这背后主要的原因就是时延。但如今的现代化数据中心网络不再基于第 2 层网络 (STP + MLAG),而是基于第 3 层网络作为底层,并具有覆盖层(VXLAN 或类似网络层)。因此,这句话可能显得有些自相矛盾。
推荐阅读: