摘要

  • NVM Express, Inc.是管理 NVMe 规范家族的非营利行业联盟,并不制造 SSD、控制器、交换机或存储阵列。
  • NVMe 把机械硬盘时代较窄、较串行的队列模型,换成内存中的多组 submission queue 与 completion queue,更适合并行闪存和多核处理器。
  • 同一套 controller、subsystem 和 namespace 语义既可在服务器内部通过 PCIe 运行,也可借助 NVMe over Fabrics 跨 TCP 或 RDMA 网络提供服务。
  • NVMe 2.x 采用模块化架构。2026 年 8 月 4 日公开的 2.4 规范集合包括 Base、PCIe/RDMA/TCP transport、NVMe-MI、Boot 以及多种专用 command set。
  • 协议提高容量的可组合性,却不定义 filesystem、持久性、RAID、erasure coding、网络设计、运营安全或应用一致性。

存储命令可以离开服务器,而不改变基本语言

一个读请求可以发往本地 PCIe SSD 上的 namespace,也可以通过 fabric 发往远端 subsystem。媒体、controller 和路径发生变化,命令、queue 和 namespace 模型却大体保持一致。

这正是存储解耦的基础。容量可集中到共享池中,再按需求分配给 host,而不必把每个 drive 都装进使用它的机箱。

但离开服务器会增加 discovery、网络、multipath、authentication、reconnect 和新的 failure domain。NVMe 让存储成为可编程服务,并没有让拓扑消失。

闪存需要为并行性而设计的协议

传统存储接口受到机械寻道和较少并发操作的影响。闪存可以同时处理大量请求,现代服务器也拥有众多 CPU core。

NVMe 使用位于内存中的 submission queue 与 completion queue。Host 写入 command,通过 doorbell 通知 controller,再通过 interrupt 或 polling 读取 completion。多组 queue 可分配给不同 core 或进程,减少共享锁和竞争。

实际结果仍取决于 controller firmware、PCIe topology、NUMA、queue depth、interrupt 策略和 workload。采用 NVMe 并不自动获得某个固定性能水平。

联盟把协议治理与产品竞争分开

NVMe 工作始于 2000 年代末,1.0 规范在 2011 年发布,NVM Express, Inc.于 2014 年成立。联盟成员来自处理器、闪存、controller、网络、系统和云计算行业。

研究截止时,Google 的 Amber Huffman 担任 President,AMD 的 Curtis Ballard 担任 Treasurer,Microchip 的 David Allen 担任 Secretary;公开董事会列有十三名 promoter 代表。

联盟负责合同、变更和 compliance 框架,成员继续在芯片、firmware、系统设计、支持和性能上竞争。参与标准工作,并不等于某产品实现了所有功能。

NVMe 2.0 把不断膨胀的单一文档拆成模块化家族

随着 PCIe 以外的 transport 和新数据模型出现,所有内容放在一份规范中越来越难维护。2021 年的 NVMe 2.0 重构把 Base、command set 和 transport 分离。

这样,TCP transport 可独立演进,Zoned Namespace 也能扩展而不必修改所有传统 controller。代价是采购者需要管理更复杂的版本组合。

2026 年 8 月 4 日公开的 NVMe 2.4 集合包括 Base 2.4、PCIe Transport 1.4、RDMA Transport 1.3、TCP Transport 1.3、NVMe-MI 2.2、Boot 1.4,以及 NVM、Key Value、Zoned Namespace、Computational Programs 和 Simple Log Memory 等 command set。“NVMe 2.4”不是单一文件。

Submission 与 completion queue 把存储工作靠近 CPU core

Host 把 command 写入 submission queue,controller 把结果写入 completion queue。不同 core 或应用可使用独立 queue pair,从而减少全局锁和上下文切换。

Doorbell 用于通知新工作。Polling 可降低某些延迟,却持续占用 CPU;interrupt coalescing 节省 CPU,也可能增加等待。Queue depth 影响利用率和 tail latency。

更深的 queue 并不总是更好。它可能掩盖饱和、延长排队时间。正确配置必须从 workload 和 SLA 出发。

Controller、subsystem 与 namespace 把逻辑端点同物理介质分开

Controller 暴露 queue 与 command。一个 subsystem 可以包含多个 controller。Namespace 表示逻辑容量,可通过不同 controller 和 path 提供给 host。

Host 看到的身份因此不必对应一块物理 SSD。阵列可组合多种 media 并提供稳定 namespace。

NVMe 不决定数据如何放置、复制或保护。RAID、erasure coding、thin provisioning、snapshot 和应用一致性仍由上层系统负责。

Admin command 与普通 I/O 一样关键

Admin queue 用于识别设备、创建 I/O queue、设置 feature、读取 log、管理 firmware、namespace 和 security。它控制普通读写得以发生的环境。

一条错误 admin command 可能删除 namespace、激活错误 firmware 或改变 power state。权限、审计与 change control 必须覆盖这一层。

Admin 与 I/O 分开有利于架构,却不意味着 control plane 次要。在 fabric 中,两者有时依赖相同网络和身份体系。

PCIe 让本地路径靠近内存和硬件

NVMe over PCIe 通过本地总线上的共享内存结构与 controller register 通信,是服务器内 SSD 和卡的直接路径。

物理接近不等于拓扑简单。Device 可能位于 PCIe switch 之后、连接到另一 NUMA socket 或共享 lane。CPU、memory 和 device 的位置影响性能。

因此不能只统计 drive 数量。异常延迟可能在到达 media 之前,就来自主机内部 PCIe 路径。

NVMe over Fabrics 把本地 controller 关系变成网络服务

NVMe-oF 1.0 与 NVMe-MI 1.0 在 2016 年 6 月 9 日发布。NVMe-oF 把 command capsule 和数据传送到远端 subsystem,host 通过 fabric 建立 queue 并访问 namespace。

这让容量池化和 compute/storage 分离成为可能。Host 可以更换,而数据留在共享系统中。

同时,NIC、switch、route、discovery、controller、authentication 和 multipath 进入 data path。网络不再只是“连接”,而是存储完整性的组成部分。

Discovery controller 简化动态接入,也形成关键依赖

Host 可查询 discovery controller,获得可用 subsystem、地址和服务。这样无需为每个 target 手工配置路径,也便于动态增删资源。

错误信息或 discovery 服务中断,会阻止新连接或把 host 引向错误 target。需要冗余、缓存、身份保护和内容验证。

Discovery 可用性与 data path 可用性不同。已有 session 可能继续工作,而新 host 无法发现服务。

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

2019 年标准化的 NVMe/TCP 把 command 与 data 映射到 TCP 连接。运营者可以使用可路由 Ethernet、IP 工具、防火墙和熟悉的网络实践,而不必建设 RDMA fabric。

便利伴随 overhead。TCP stack、copy、interrupt 和 CPU 可能影响 tail latency。Kernel 实现、offload、传输大小和 tuning 都很重要。

Transport 还定义 storage 特定 framing 与 digest,并可使用 TLS。支持 TLS 不等于已经启用或安全运营。

NVMe/RDMA 追求低延迟,同时要求更严格的 fabric 工程

RDMA 通过 queue pair、registered memory 和 NIC offload 减少 CPU 介入,适合 HPC 和 AI 中重视微秒与 CPU 周期的场景。

RDMA 不是一种统一网络。RoCE、iWARP 等 binding 在拥塞、丢包、PFC、ECN 和内存管理上要求不同。

低延迟 benchmark 不意味着简单运营。网络故障可能表现为 storage timeout,需要网络与系统团队共同诊断。

Multipath 把冗余变成 host 的策略选择

一个 namespace 可以通过多个 controller 与 path 访问。Host 决定 load balance 与 failover。Asymmetric Namespace Access 标示 optimized、non-optimized 或 unavailable 路径。

两条链路可能仍共享 switch、controller、电源或 route。真正独立必须通过故障测试验证。

错误 policy 可能长期保留坏路径,或把 I/O 发往较慢路径。冗余应由实际行为衡量,而不是端口数量。

Reservation 协调共享访问,却不能替代集群共识

NVMe reservation 允许 host 注册并保留 namespace,防止未授权 writer 访问,常用于 cluster 和 failover。

它不替代共识协议或应用一致性。故障 host 可能留下 reservation state,恢复过程必须 fence 旧节点,避免它重新写入。

错误恢复会把保护机制变成不可用或数据损坏来源。

存储离开 PCIe 后,认证与 TLS 成为必要条件

本地设备往往继承物理边界。通过网络连接后,initiator 与 target 需要证明身份,并保护适当的 control 与 data channel。

NVMe 定义 authentication 机制,NVMe/TCP 可使用 TLS。实际保障取决于密钥、证书、轮换、算法、访问策略和实现质量。功能存在不代表安全配置完成。

Discovery、admin 与 data plane 必须一起评估。身份真实,也可能拥有过宽权限。

NVMe-MI 提供独立于应用 I/O 的管理路径

NVMe Management Interface 允许工具发现 subsystem、读取健康状态、清点 device 并执行某些管理动作,即使主 I/O path 未被应用使用。

这有利于维护和恢复,却增加另一个高权限接口。集中管理平台可读取敏感信息或批量改变设备。

NVMe-MI 可以与 Redfish 等管理体系集成。集成不代表不同标准组织和供应商责任合并。

Zoned Namespace 把介质约束暴露给 host software

ZNS 把容量分为顺序写入的 zone。软件了解 media 布局后,可能减少 controller 内部 garbage collection,提高 endurance 或可预测性。

收益要求 filesystem、database 或 storage layer 理解 zone。按传统 block device 设计的应用不会自动获得优势。

ZNS 体现了 NVMe 的取舍:暴露更多介质行为可以提高效率,也提高软件可移植成本。

Key Value、Simple Log Memory 与 Computational Programs 扩展 namespace 含义

专用 command set 支持 key/value 访问、简单日志内存或在存储附近执行程序,目标是减少转换和数据移动。

采用依赖 controller、driver、library 和 application。写入规范不意味着所有 SSD 和 array 都提供该功能。

功能越多,capability discovery 和 fallback 越重要。模块化带来灵活性,也形成新的商业兼容矩阵。

Compliance 提供有用证据,却不认证端到端性能

Compliance program 与 interoperability workshop 测试具体 host-controller 行为,能发现仅阅读规范看不出的分歧。

列入清单不代表在每种拓扑下拥有某个 latency、endurance、recovery 或 security 水平。Optional feature 与 driver-firmware matrix 会不断变化。

买家应把 compliance 当作底线,并测试自己的 workload、故障和 upgrade 流程。

存储解耦把容量与服务器分开,也重新分配责任

本地存储往往把 device、host 和系统团队绑定在一起。远端 pool 可服务多个消费者,并通过软件调整分配。

Network、storage、platform、security 和 application 团队因此共享同一 incident。Fabric degradation 可能看起来像 database 问题,controller firmware 问题也可能像网络丢失。

经济收益取决于容量利用率和运营能力,而不只是每 TB 价格。

AI 把存储延迟直接变成计算成本

训练任务要加载 dataset、写 checkpoint、交换大规模状态。当成千上万 accelerator 等待时,存储尾延迟会浪费昂贵计算资源。

TCP、RDMA、multipath 和 shared namespace 提供不同架构。选择需考虑拥塞、metadata、queue behavior、故障与恢复。

目标不应只是峰值 throughput,而应是在同步负载下保持可预测的排队与恢复时间。

NVMe 2.4 展示协议范围,也加大版本压力

2.4 集合协调 Base、transport、Boot、Management Interface 与专用 command set。NVMe 已成为完整 stack,而非单纯 SSD 接口。

Host 可以支持 Base 2.4 却不支持所有 command set;TCP controller 也可能与 RDMA 产品功能不同。支持声明必须具体。

Driver、OS、firmware、transport 和 management tool 形成的矩阵,在实践中就是协议的一部分。

NVMe 让存储可组合,却没有让服务变简单

共同协议降低一种切换成本:command 与 namespace 可以从 PCIe 转向 fabric,或从一家供应商转向另一家。数据迁移、身份、安全、网络、可观测性与支持成本仍然存在。

优势是协议与产品更清楚地分离。风险是“NVMe”这一名称掩盖高度不同的架构。

存储因此更可编程、更可分布,但仍是必须在故障中解释清楚的数据完整性系统。