摘要

  • NVM Express, Inc. 是 NVMe 规范系列背后的非营利性行业联盟。它不生产 SSD、控制器、交换机或存储系统。
  • NVMe 用内存中的多个提交队列(Submission Queue)与完成队列(Completion Queue),取代了硬盘时代基于串行的假设,以适应并行闪存与多核 CPU。
  • 同样的控制器、子系统与命名空间模型,既可通过 PCIe 在本地运行,也可通过 NVMe over Fabrics 远程运行;TCP 与 RDMA 带来不同的运行特性。
  • NVMe 2.x 采用模块化设计。2026 年 8 月 4 日发布的 2.4 版本组合,协调了 Base、PCIe/RDMA/TCP 传输层、NVMe-MI、Boot 以及多个专用命令集。
  • 该协议让容量更具可组合性,但既不定义文件系统、耐用性、RAID、纠删码(Erasure Coding)、网络设计、运行安全,也不定义应用一致性。

存储命令可以离开服务器,而无需改变其基础语言

应用程序既可以从本地 PCIe 命名空间读取,也可以通过 Fabric 从远程子系统读取。介质、控制器与路径改变了,命令模型却大体保持不变。

这种连续性使解耦(Disaggregation)成为可能。容量可以被池化,并按需分配给主机,而不是把每个设备都装进使用它的服务器。

此外还有发现(Discovery)、网络、多路径(Multipath)、身份认证、重连与新的故障域。NVMe 让存储成为可编程的服务,而不是一种与拓扑无关的资源。

闪存需要的是并行协议,而非机械延迟

旧接口反映的是硬盘与窄队列的设计。闪存可以并行处理大量操作,而服务器拥有众多 CPU 核心。

NVMe 使用内存中成对的提交队列与完成队列。主机写入命令、触发门铃(Doorbell),并通过中断或轮询获取完成通知。多个队列可以减少共享锁竞争,并可映射到不同核心。

不过,性能仍取决于固件、PCIe 拓扑、NUMA、队列深度、中断与工作负载。协议名称并不保证普遍的延迟水平。

联盟将协议治理与产品竞争分离

这项工作始于 2000 年代末;NVMe 1.0 于 2011 年发布,NVM Express, Inc. 于 2014 年成立。成员来自 CPU、介质、控制器、网络、云与系统市场。

截至统计日期,Google 的 Amber Huffman 担任主席(President),AMD 的 Curtis Ballard 担任财务主管(Treasurer),Microchip 的 David Allen 担任秘书(Secretary)。公开的董事会名单列有十三位发起人(Promoter)代表。

联盟负责定义协议契约与合规要求。成员在芯片、固件、系统、支持与性能方面继续相互竞争。成为会员并不代表实现了完整的协议。

NVMe 2.0 将不断增长的文档拆分为模块化家族

多种传输层与数据模型让单一文档变得难以维护。2021 年的 2.0 重构将 Base、命令集与传输层分开。

这样一来,TCP 可以在不重写每条命令的情况下继续演进;ZNS 可以在不改变每个标准控制器的情况下发展。但代价是版本矩阵变得更加复杂。

2026 年 8 月 4 日发布的 2.4 组合包括 Base 2.4、PCIe 1.4、RDMA 1.3、TCP 1.3、NVMe-MI 2.2、Boot 1.4,以及 NVM、Key-Value、Zoned Namespace、Computational Programs 与 Simple Log Memory 命令集。“NVMe 2.4”并不是单一文档。

提交队列与完成队列让任务更贴近 CPU 核心

主机把命令写入提交队列;控制器在完成队列中报告结果。进程或核心可以使用各自的队列对,从而减少争用。

门铃用于通知有新工作。轮询可以降低延迟,但会占用 CPU;中断合并(Interrupt Coalescing)能节省 CPU 周期,也可能增加等待时间。队列深度影响利用率与尾延迟。

更深的队列并不自动更好。它可能掩盖饱和,并增加等待时间。正确的设置取决于工作负载。

控制器、子系统与命名空间将逻辑端点与介质分离

控制器提供队列与命令。一个子系统可以包含多个控制器。命名空间代表逻辑容量,可以通过多条路径访问。

因此,主机所面对的身份并不必然对应一块物理 SSD。阵列可以聚合多块介质,并呈现稳定的命名空间。

NVMe 既不规定数据放置,也不规定复制或保护。RAID、纠删码、精简配置(Thin Provisioning)与一致性都属于外围系统。

管理命令决定 I/O 的运行环境

管理队列(Admin Queue)负责管理标识、队列创建、特性、日志、固件、命名空间与安全。它为常规读写操作建立上下文。

一条管理命令可以删除命名空间、激活错误的固件,或更改电源状态(Power State)。权限、审计与变更控制至关重要。

管理面与 I/O 的分离改善了架构,但并未降低控制面的关键性。在 Fabric 环境中,两者可能依赖同一个网络。

PCIe 让本地路径紧贴内存与硬件

基于 PCIe 的 NVMe 使用本地总线上的共享内存结构与控制器寄存器。这是连接服务器内 SSD 与扩展卡的直接路径。

拓扑仍然重要。设备可能位于 PCIe 交换机之后、另一个 NUMA 插槽上,或使用共享通道(Lane)。CPU、内存与设备必须合理布局。

仅盘点驱动器数量远远不够。延迟可能在数据到达介质之前,就已经在主机内部产生。

NVMe over Fabrics 将本地关系变为网络服务

NVMe-oF 1.0 与 NVMe-MI 1.0 于 2016 年 6 月 9 日发布。NVMe-oF 将命令胶囊(Capsule)与数据传送到远程子系统,并通过 Fabric 创建队列。

容量可以被池化,并与计算资源分离。主机可以更换,而无需迁移数据。

为此,网卡(NIC)、交换机、路由、发现机制、控制器、身份认证与多路径都进入了数据路径。网络成为数据完整性系统的一部分。

发现控制器简化接入,也带来关键依赖

主机向发现控制器(Discovery Controller)查询子系统、地址与服务。逐个目标的手动配置变得多余。

错误的信息或故障可能阻断新连接,或把连接引向错误的目标。因此,冗余、缓存、校验与身份保护必不可少。

发现机制与数据可用性并非同一回事。已有会话可能继续运行,而新的主机却什么都找不到。

NVMe/TCP 将存储网络带到普通 IP 网络

2019 年标准化的 TCP 传输层将命令与数据映射到 TCP 连接上。运营商可以使用路由以太网、IP 工具与防火墙,而无需搭建 RDMA 网络。

这种易用性以额外开销为代价。TCP 协议栈、数据拷贝、中断与 CPU 都会影响尾延迟。内核、硬件卸载、传输大小与调优都很重要。

该传输层增加了帧封装与摘要(Digest),并可使用 TLS。支持 TLS 并不代表 TLS 已被启用或正确运行。

NVMe/RDMA 追求低延迟,也要求严格的 Fabric 纪律

RDMA 利用队列对(Queue Pair)、注册内存与网卡卸载,以更少的 CPU 干预搬运数据。这对 HPC 与 AI 很有吸引力。

RDMA 并非单一形态的网络。RoCE、iWARP 及其他绑定方式在拥塞、丢包、PFC、ECN 与内存注册方面有着不同要求。

基准测试成绩高并不代表运维简单。Fabric 的问题会表现为存储超时,需要同时具备网络与系统知识。

多路径将冗余决策交给主机

命名空间可以通过多个控制器与路径访问。负载均衡与故障切换由主机决定。非对称命名空间访问(ANA)会标记优化路径、非优化路径或不可用路径。

两条链路可能共享交换机、控制器、电源或路由。独立性必须通过真实故障来检验。

错误的策略会让差路径被保留过久,或让 I/O 走慢速路径。冗余是实际观察到的行为,而不是端口数量。

预留机制协调共享访问,但不能替代共识

NVMe 预留机制允许主机注册并预留命名空间,从而阻止未授权的写入者。这在集群与故障切换场景中很有帮助。

它们不能替代集群共识,也不能替代应用一致性。故障主机可能留下残留状态;隔离(Fencing)必须阻止旧节点继续写入。

糟糕的恢复流程可能把保护变成故障或数据损坏。

当存储离开 PCIe,身份认证与 TLS 变得重要

本地设备受益于隐性的物理边界。在网络中,发起端(Initiator)与目标端(Target)必须证明身份并保护通道。

NVMe 定义了身份认证(Authentication);TCP 可以使用 TLS。实际效果取决于密钥、证书、轮换、算法与策略。支持某项能力并不等于安全地使用它。

发现面、管理面与数据面必须放在一起审视。一个真实可信的身份仍可能拥有过多权限。

NVMe-MI 建立独立于应用 I/O 的管理面

NVMe 管理接口(NVMe-MI)允许在主 I/O 路径之外进行盘点、健康查询与某些操作。

这有助于维护与恢复,但也增加了一个特权接口。管理工具可能读取敏感信息,或批量修改设备。

NVMe-MI 可以与 Redfish 集成。集成并不会消除标准与厂商之间的责任边界。

分区命名空间让软件看见介质限制

ZNS 将容量划分为只能顺序写入的区(Zone)。让主机看到这些边界,可以减少内部垃圾回收,并改善耐用性或可预测性。

要获得这一优势,需要区感知(Zone-aware)的文件系统、数据库或存储层。普通的块设备应用不会自动受益。

ZNS 体现了一种取舍:对介质了解得更多,能提升效率,但也对软件的可移植性提出更高要求。

Key Value、Simple Log Memory 与 Computational Programs 扩展命名空间

专用命令集支持键值(Key/Value)访问、简单的日志结构,或在存储附近执行程序。它们旨在减少地址转换与数据搬移。

能否发挥作用取决于控制器、驱动程序、库与应用程序。规范并不会让某项功能变得普遍可用。

选项越多,能力发现与回退机制就越重要。模块化带来灵活性,也带来新的市场矩阵。

合规提供证据,但不认证端到端性能

相关项目与研讨会测试具体的主机-控制器交互,并发现仅靠规范文本看不出的偏差。

进入合规列表并不衡量每种拓扑下的延迟、耐用性、恢复能力或安全性。可选特性与驱动程序-固件组合矩阵也在不断变化。

采购方应把合规视为最低底线,并自行测试工作负载、故障与升级场景。

解耦将容量与主机分离,并重新分配责任

本地存储把设备、服务器与系统团队绑定在一起。远程池服务众多消费方,并通过软件分配。

网络、存储、平台、安全与应用团队如今共同面对故障。Fabric 性能劣化可能看起来像数据库故障;固件问题可能看起来像网络中断。

经济性取决于利用率与可运维性,而不只是每 TB 价格。

AI 让存储延迟变成算力成本

训练要加载数据集、写入检查点,并大规模搬移状态。当数千个加速器在等待时,存储等待时间的成本会变得很高。

TCP、RDMA、多路径与共享命名空间提供了不同的架构。拥塞、恢复、元数据与队列行为都应纳入选型考量。

目标不只是峰值吞吐量,还包括同步负载下可预测的队列延迟与恢复延迟。

NVMe 2.4 展现体系的广度与版本压力

该版本组合协调了 Base、传输层、Boot、管理接口与命令集。NVMe 是一个协议栈,而不只是 SSD 的接口。

一台主机可以只支持 Base 2.4 而不支持任何命令集;TCP 控制器可能具备与 RDMA 产品不同的功能。支持声明必须具体明确。

驱动程序、操作系统、固件、传输层与管理工具构成一个矩阵,它实际上已成为协议的一部分。

NVMe 让存储可组合,却没让它变简单

共同的契约降低了一类切换成本:命令与命名空间可以经受住从 PCIe 到 Fabric、或从一家厂商到另一家厂商的迁移。但数据迁移、安全、可观测性、网络与支持仍然存在。

优势在于协议与产品的分离。风险在于,截然不同的架构可能被同一个名字掩盖。

存储正变得可编程、分布式,但它仍是一个必须在故障条件下被理解的完整性系统。