编者荐语:
近期,我们发布了分布式块存储产品的最新版本——SMTX ZBS 5.0。通过在业内率先引入英特尔傲腾持久内存、NVMe-oF、25GbE/100GbE 及 RDMA 等先进的软硬件技术,实现了业界领先的性能与低时延。对于其中的网络技术,希望通过本文帮助大家了解部分内容。
曾几何时,对于基础架构工程师而言,基于网络的存储器革新并不会构成真正的问题:因为网速很快,硬盘驱动器转速很慢。自然网络只要升级至 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 条命令。
总之,可以说 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-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。
推荐阅读:
定义分布式块存储性能新标准,SmartX 发布 SMTX ZBS 5.0