过去,网络只要升级至 10Gb、40Gb 和 100Gb 以太网,就足以满足存储系统的联网需求了。但现如今,随着超快固态硬盘 (SSD) 和高速非易失性内存 (Non-Volatile Memory Express, NVMe) 的问世,网络存储已经发生了翻天覆地的变化。
什么是 NVMe?
传统的存储系统的基础是硬盘驱动器 (HDD) 旋转介质,这项技术历经 60 余年沉淀发展而成。随着设备尺寸越来越小且速度越来越快,驱动器技术不断演进,固态驱动器 (SSD) 的问世给存储世界注入了新的血液。
突然之间,磁盘驱动器可以提供媲美 RAM 的性能,具有非常低的延迟且传输速率超过 20 Gbps。这类 SSD 驱动器成为了传统存储系统中 HDD 的完美替代品。SSD 速度更快、时延更低、发热更少且功耗更低,并且无需对现有硬件进行重新设计。
对于存储行业而言,这意味着双赢。
但将 SSD 直接插入现有存储系统有一个缺点:它无法充分发挥出底层技术的性能提升潜力。想要真正发挥 SSD 设备的潜力需要重新审视存储系统连接到服务器的方式,存储器供应商为基于 SSD 的存储器设计了多种方法,其中最受业界关注的是直连 PCI Express (PCIe) 总线的设计。在构建了多个专有设备之后,存储和服务器行业于 2011 年联手创建了 NVMe(NVM Express)。
NVMe 是一种协议,而并非外形规格或接口规范。不同于其他存储协议,NVMe将 SSD 设备视为内存,而不是硬盘驱动器。NVMe 协议的设计从一开始就以搭配 PCIe 接口使用为目标,因此几乎直接连接到服务器的 CPU 和内存子系统。
在多核环境内,NVMe 效率更高,因为它允许每个核心独立地与存储系统进行交互。随着 NVMe 中的队列数量和深度增加,多核 CPU 会使 SSD 保持忙碌状态,消除内部性能瓶颈。NVMe 属于非统一内存体系结构 (NUMA) 感知协议,能够充分发挥新型 CPU 中的内存子系统设计的优势。相比使用 SATA 或 SAS 的 SSD,具有 SSD 和 NVMe 协议的存储器能够显著提升每秒输入输出 (IOPS) 并大大降低时延。
可以说 NVMe 能够将现代化 SSD 允许的并行度发挥到极致。因此 NVMe 能够减少 I/O 开销,并带来了许多性能提升,包括支持多个长命令队列和降低时延。
NVMe 的定义与规范
NVMe旨在定义主机软件如何通过 PCI Express (PCIe) 总线与非易失性存储器进行通信,适用于各种 PCIe 固态硬盘 (SSD) 。NVM Express 是由技术行业领导者组成的非营利性联盟,负责 NVMe 技术的定义、管理和市场推广。除了 NVMe 基本规范外,该组织还负责其他几项规范:NVMe over Fabrics (NVMe-oF) 基于网络连接架构使用 NVMe 命令, NVMe Management Interface (NVMe-MI)用于在服务器与存储系统中管理 NVMe/PCIe SSD。
NVMe 是专为 SSD 而设计的规范。它是一种更高效的接口,相比于串行 ATA (SATA) 之类的传统接口,它能够为 SSD 提供更低的时延和更高的可扩展性。此规范的第一部分对应的是主机控制接口。NVMe 体系结构引入了全新的高性能排队机制,支持 65,535 个 I/O 队列,每个队列含 65,535 条命令(称为队列深度或者未完成命令数)。队列映射到 CPU 核心,提供可扩展的性能。
NVMe 接口显著减少了存储器映射输入/输出命令的数量,并且能够调整操作系统设备驱动程序,使其在中断模式或轮询模式下运行,从而提升性能并降低时延。NVMe 规范还包含适用于 SSD 命令的主机到设备协议,供操作系统用于:读取、写入、清空、TRIM、固件管理、温控、报错等操作。
什么是 NVMe over Fabrics (NVMe-oF)?
NVMe 协议并非局限于在服务器内部连接本地闪存驱动器,它还可通过网络使用。在网络环境内使用时,网络“架构”支持存储和服务器元素之间的任意连接。NVMe-oF 支持组织创建超高性能存储网络,其时延能够媲美直连存储。因而可在服务器之间按需共享快速存储设备。NVMe-oF 可视为基于光纤通道的 SCSI 或 iSCSI 的替代品,其优势在于时延更低、I/O 速率更高,且生产力更优。
服务器(或其他主机)通过网络架构与 NVMe 存储器直接进行通信,或者通过控制器与之进行间接通信。如果存储器解决方案使用控制器,那么控制器就会与自己的存储器目标进行通信,可采用的方式包括 NVMe-oF或者其他专属或非专属解决方案。这取决于存储器供应商的实现方法和选择。
NVMe-oF 传输协议
- 光纤通道 (NVMe/FC):FC-NVMe 和 FC-SCSI 同样都基于 FCP,IO 交互基于 Exchange。FC-NVMe 基于传统的 FC 网络,通过升级主机驱动和交换机支持,FC-SCSI 和 FC-NVMe 能同时运行在同一个 FC 网络中。FC-NVMe 能最大化继承传统的 FC 网络,复用网络基础设施,基于 FC 物理网络发挥 NVMe新协议的优势。
- TCP (NVMe/TCP):基于现有的 IP 网络,采用 TCP 协议传输 NVMe,在网络基础设施不变的情况下实现端到端 NVMe。
- 远程直接内存访问(InfiniBand 或以太网网络上支持的 NVMe/RDMA):NVMe over RDMA。RDMA 是承载 NoF 的原生网络协议,RDMA 协议除了 RoCE 外还包括 IB(InfiniBand)和 iWARP(Internet Wide Area RDMA Protocol)。NVMe over RDMA 协议比较简单,直接把 NVMe 的 IO 队列映射到 RDMA QP(Queue Pair)连接,通过 RDMA SEND,RDMA WRITE,RDMA READ 三个语义实现 IO 交互。
什么是 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-oF的三种选项之一,同样的,RDMA 也有三种类型:
(1) InfiniBand:InfiniBand 网络架构原生支持 RDMA。
(2) RoCE(基于融合以太网的 RDMA):其方式是通过以太网来封装 InfiniBand 传输包。RoCE 有两种版本:
- RoCEv1:以太网链路层协议(Ethertype 0x8915),支持在相同以太网广播域内任意两个主机之间进行通信。因此,仅限第 2 层网络,不可路由。
- RoCEv2:利用 UDP/IP(IPv4 或 IPv6)报头增强 RoCEv1,因此增加了第 3 层网络可路由性。NVMe/RoCEv2 默认使用 UDP 目标端口 4791。
(3) iWARP(互联网广域 RDMA 协议):基于 IETF 标准的拥塞感知协议,如 TCP 和 SCTP。具有卸载 TCP/IP 流量控制和管理功能。
目前,RoCEv2 是供应商最常用的选择。
NVMe-oF 网络要求
协议要求
如上所述,NVMe-oF 解决方案不同,要求也不尽相同:
(1) 专用网络
- NVMe/IB:使用基于 InfiniBand 网络的 RDMA。在高性能计算 (HPC) 领域颇受欢迎。
- NVMe/FC:需要第 5 代或第 6 代光纤通道网络。如果数据中心内已有光纤通道网络或交换基础架构,可以继续使用这些专用资源作为 NVMe-oF 的传输方式。但是,传统 4、16 或 32 Gbps FC部署速度可能不足以真正发挥出 NVMe 设备的性能提升。
(2) 共享或融合以太网
仅 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 存在一些缺点:它使用的是服务器的算力,这样一来服务器算力就无法全部用于运行应用程序。此外,其传输过程中时延比其他 NVMe-oF 协议更长,主要是因为需要维护多个数据副本,以免在路由级发生数据包丢失。
- NVMe/iWARP:使用共享以太网网络和基于 TCP 的 RDMA。
- NVMe/RoCEv2:使用共享以太网网络和基于 UDP 的 RDMA。
传输要求:有损传输 vs 无损传输
在以太网架构中存在有损传输与无损传输两种,RDMA 是两个设备之间的内存到内存传输机制,因此理论上它不能容许任何丢包。但由于 iWARP 基于 TCP 协议(以及 NVMe/TCP),它可以容许在传输中发生丢包和少量 TCP 重传,因此 NVMe/iWARP 和 NVMe/TCP 均可通过有损网络进行传输。
RoCE 则使用 UDP协议。根据 RoCEv2 规范,应该使用无损架构。不过RoCE 协议内部存在一种防范丢包的机制:发生丢包时,将把具有特定数据包序号 (PSN) 的 NACK 控制包发送给发送方,以供发送方重新发送该数据包。因此,所谓 RoCE 要求无损网络传输(无损以太网)的说法并不完全正确。RoCE 可以在无损网络或有损网络中运行。
原文链接:https://aboutnetworks.net/nvme-and-nvmeof/