NVMe over Fabrics:FC-NVMe、NVMe/TCP、NVMe/RoCE 及其光模块
NVMe 在服务器内部取代了 SCSI,因为闪存足够快,能够暴露出协议本身的开销; NVMe over Fabrics(NVMe-oF)将同一套命令集扩展到网络之上,让共享存储也能跟上这一速度。它运行在三种传输方式之上,分别对应三类网络——因而也对应三类光模块和三套物理层规则。本文比较这三者,并说明每一种对链路提出的要求。
为什么选择 NVMe-oF
| 方面 | SCSI 时代(FCP、iSCSI) | NVMe-oF |
|---|---|---|
| 命令队列 | 单队列,约 32–256 条命令 | 最多 64k 个队列 × 64k 条命令;设计上即为并行 |
| 每次 I/O 的协议开销 | 数十 µs 的 CPU 时间 | 数 µs;RDMA 传输绕过 CPU |
| 网络增加的延迟 | 典型 100–200 µs | 10–30 µs(RDMA/FC)、30–80 µs(TCP) |
| 最适合 | HDD 和早期闪存阵列 | 全闪存、解耦存储、GPU 数据管道 |
传输方式
| 传输方式 | 网络 | 无损? | 延迟 | 说明 |
|---|---|---|---|---|
| FC-NVMe(FC-NVMe-2) | Fibre Channel 16/32/64GFC | 是,通过信用机制 | 很低 | 与 SCSI FCP 运行在同一网络和同一批 SFP 上;分区和名称服务器不变(FC 协议基础) |
| NVMe/RoCE v2 | 带 RDMA NIC 的 25/100/200/400G 以太网 | 需要 PFC/ECN(DCQCN) | 很低 | RDMA verbs 运行在 UDP/IP 之上;需要端到端的无损配置(无损以太网) |
| NVMe/TCP | 任意以太网/IP | 否——丢包由 TCP 处理 | 低到中 | 无需特殊 NIC 或交换机功能;可路由;企业环境中的主流选择 |
| NVMe/IB | InfiniBand | 是,通过信用机制 | 很低 | HPC/AI 存储(InfiniBand) |
四者共享同一套 NVMe-oF 架构:发现控制器告诉主机存在哪些子系统;主机将队列 连接到 I/O 控制器;ANA(非对称命名空间访问)负责处理多路径。
每种传输对物理层的要求
| 传输方式 | 链路要求 | 光模块 |
|---|---|---|
| FC-NVMe | 干净的 FC 链路——CRC/ITW 接近零,信用未耗尽 | FC SFP 16/32/64GFC,经过厂商验证(FC 光模块) |
| NVMe/RoCE | 零丢包:开启 FEC,在 RoCE 类别上开启 PFC,无 CRC 错误(每丢失一帧都会以 go-back-N 重传方式卡住 RDMA 队列) | 25G SFP28 / 100G QSFP28 / 400G;机柜内用 DAC,同排用 SR/AOC,跨机房用 LR/DR;FEC 按 PMD 而定 |
| NVMe/TCP | 普通链路;丢包影响的是延迟,而非正确性 | 任意以太网光模块 |
| NVMe/IB | 与 InfiniBand 网络相同 | IB 线缆和光模块(IB 布线) |
RoCE 是最敏感的一个:接收光功率偏低或接口不洁净的链路会产生 CRC 错误,这类错误在 TCP 下会被默默吸收,但会明显卡住 RDMA 队列。存储延迟出现尖峰、且与端口错误计数器同步变化,就是这一问题的信号(接收光功率与链路预算、 VDM 与 FEC 指标)。
如何选择
| 场景 | 合适的传输方式 |
|---|---|
| 已有 FC SAN、全闪存阵列 | FC-NVMe——同一网络,同一批光模块,按目标逐个启用 |
| 新建以太网存储、多厂商混用、跨站点路由 | NVMe/TCP |
| 延迟敏感、单一厂商以太网、内部具备无损网络经验 | NVMe/RoCE |
| 采用 IB 网络的 HPC/AI 集群 | NVMe/IB,或基于 IB 的并行文件系统 |
| 采用以太网横向扩展的 GPU 集群 | NVMe/RoCE,或在独立存储网络上使用 NVMe/TCP(GPU 网络) |
运维要点
- 分离组网:存储与计算尽可能分开建网——至少划分独立的流量类别;RoCE 需要专属的无损流量类别。
- MTU:以太网传输上设为 9000;全程保持一致。
- 多路径:两张网络,或两组 VLAN/leaf;启动器需支持 ANA。
- 监控:按端口监控 CRC/FEC 和暂停帧计数器,再加上 DDM 趋势——衰退中的光模块会先表现为尾部延迟升高,早于其彻底故障(监控)。
- 固件:NIC/HBA 与阵列的固件兼容性矩阵,和光模块兼容性同样重要(SAN 中的光模块)。
在 CodingBox 中
NVMe-oF 网络所用的光模块,就是普通的 FC、以太网或 IB 模块;区别在于该传输方式对错误的容忍度有多低。安装前在工作台上读取识别信息、测量基线 DDM (Check transceiver(检测光模块)、 DDM),以及写入阵列和交换机厂商能够接受的识别信息(厂商锁定),是这项工作中涉及编程器的部分。
这些网络所运行的适配器——100G/200G NIC、其笼位、PCIe 限制和模块策略:带光口的 NIC。