3、NVMe over Fabrics概览:NVMe-oF的定义、架构组件、传输层映射

好,咱们进入正题。NVMe over Fabrics,圈内人通常简称NVMe-oF。这玩意儿到底解决了什么问题?说白了,就是把NVMe那套高性能的协议,从你的电脑内部(PCIe总线)给搬到了网络上。

你想想看,以前我们访问远程存储,要么走iSCSI,要么走FC(光纤通道)。这些协议在NVMe面前,延迟高、队列浅、CPU开销大。NVMe-oF的出现,就是让远程访问SSD的速度,尽量接近本地NVMe SSD。我个人觉得,这是存储网络过去十年里最值得关注的技术演进之一。

3.1 NVMe-oF的定义与核心思想

NVMe-oF,全称NVMe over Fabrics。它定义了一套标准,让NVMe命令可以跨越网络传输。核心思想就一句话:保持NVMe的协议语义不变,把传输层从PCIe换成网络

什么意思呢?NVMe协议里那些Submission Queue、Completion Queue、Doorbell寄存器这些概念,在NVMe-oF里一个都没少。只是原来你写寄存器通知SSD,现在通过网络把命令包发给远端的目标端。

关键点:NVMe-oF不是重新发明了一套存储协议,而是NVMe协议的“网络化”延伸。它保留了NVMe的轻量级、高并发的特性。

我在项目中遇到过一些朋友,以为NVMe-oF是某种新的硬件。其实不是,它更多是软件和协议层面的工作。当然,配合RDMA网卡,效果会好很多。

3.2 架构组件:Host、Target与网络

NVMe-oF的架构,其实不复杂。主要分三块:

  • Host(主机端):发起I/O请求的一方。通常是服务器,上面跑着NVMe驱动和NVMe-oF的客户端软件(比如Linux内核的nvme-rdma驱动)。
  • Target(目标端):接收并处理I/O请求的一方。通常是存储阵列或者JBOF(一堆闪存盘)。它上面跑着NVMe-oF的目标端软件(比如SPDK或者Linux的nvmet)。
  • 网络(Fabric):连接Host和Target的传输网络。可以是FC、TCP或者RDMA(RoCE/InfiniBand)。

嗯,这里要注意,Host和Target的角色是逻辑上的。一台机器可以既是Host(访问别的存储),又是Target(被别人访问)。

我个人的习惯是,在画架构图时,把Host和Target之间的交互想象成“客户端-服务器”模型。Host是客户端,Target是服务器。NVMe命令就是请求,Completion就是响应。

3.3 传输层映射:FC、TCP、RDMA

NVMe-oF最灵活的地方,就是它支持多种传输层。你可以根据现有的网络基础设施和性能需求来选择。目前主流的有三种:

传输层 底层网络 特点 典型场景
FC (Fibre Channel) 光纤通道网络 成熟稳定,与现有FC-SAN兼容 传统企业存储,已有FC基础设施
TCP 标准以太网 兼容性好,无需特殊硬件 跨数据中心,长距离传输
RDMA RoCE / InfiniBand 超低延迟,CPU卸载 高性能计算,延迟敏感场景

3.3.1 NVMe over FC

这是最“保守”的选择。如果你公司已经有一套FC SAN网络,交换机、HBA卡都齐了,那NVMe over FC就是最平滑的升级路径。它利用FC协议栈来承载NVMe命令。

我曾经在客户的机房看到,他们为了从FCP(FC上的SCSI)迁移到NVMe over FC,只需要升级HBA卡的固件和驱动,交换机配置几乎不用动。嗯,这里要注意,虽然硬件兼容,但NVMe over FC要求FC交换机支持FC-NVMe特性,老旧的8G FC交换机可能不行。

3.3.2 NVMe over TCP

这个方案最“亲民”。它不需要任何特殊硬件,只要你的服务器有标准网卡,网络是TCP/IP就行。NVMe命令被封装在TCP段里传输。

你想想看,这意味着什么?意味着你可以用普通的以太网交换机,甚至跨互联网访问NVMe存储。当然,代价就是性能。TCP协议栈的CPU开销大,延迟也比RDMA高不少。

我个人觉得,NVMe over TCP适合那些对延迟不敏感,但希望统一管理、降低成本的场景。比如,备份、归档、或者虚拟机镜像存储。

3.3.3 NVMe over RDMA

这才是NVMe-oF的“灵魂”所在。RDMA(远程直接内存访问)允许数据直接从一台机器的内存搬到另一台机器的内存,完全绕过CPU和操作系统内核。配合NVMe-oF,延迟可以做到10微秒以内。

RDMA有两种主流实现:

  • InfiniBand:原生RDMA,性能最好,但需要专用交换机和网卡,成本高。
  • RoCE (RDMA over Converged Ethernet):在标准以太网上实现RDMA。v1版本有局限,v2版本已经比较成熟。成本比InfiniBand低,但需要网卡和交换机支持PFC(优先级流控制)等特性。

避坑指南:我曾经在部署RoCE v2时踩过坑。以为只要网卡支持就行,结果交换机没开启PFC和ECN,导致丢包后性能断崖式下跌。记住,RoCE对无损网络的要求很高,不是插上网线就能跑的。

选择哪种传输层,取决于你的预算、现有网络和性能要求。我个人建议,如果是新建数据中心,且对性能有极致要求,直接上RoCE v2。如果已有FC网络,就继续用FC。如果只是想低成本尝鲜,TCP也行。

3.4 小结

NVMe-oF的核心,就是把NVMe的“快”延伸到网络上。架构上分Host、Target和Fabric三部分。传输层有三种选择:FC(稳)、TCP(省)、RDMA(快)。

嗯,这一章先讲到这里。下一章,我们会深入NVMe-oF的协议细节,看看命令是怎么在网络上“飞”起来的。