NVM子系统架构 - ✅ 图 18:两个控制器 + 两个独立 PCIe 端口的多路径共享结构 (第39页)
NVME2.0协议解读 1 min read

NVM子系统架构 - ✅ 图 18:两个控制器 + 两个独立 PCIe 端口的多路径共享结构 (第39页)

Blog Author

你已经进入了 NVMe Base Specification v2.0b 的 §2.4 多路径 I/O 和命名空间共享(Multi-Path I/O and Namespace Sharing) 最关键的架构示例部分,下面我们将从图 18 和图 19 继续深入中文分析,帮助你彻底掌握 “多控制器 + 多端口 + 虚拟化共享命名空间” 背后的机制与用法。


✅ 图 18:两个控制器 + 两个独立 PCIe 端口的多路径共享结构

🔹结构描述:

PCIe Port X                     PCIe Port Y
 ┌────────────┐                ┌────────────┐
 │ Function 0 │                │ Function 0 │
 │ Controller │                │ Controller │
 │  NS A, NSB │                │  NS C, NSB │
 └────────────┘                └────────────┘

其中:

  • Controller X:访问私有 NS A 和共享 NS B(NSID 1 和 NSID 2)
  • Controller Y:访问私有 NS C 和共享 NS B(NSID 3 和 NSID 2)
  • 两个控制器共享 NS B(NSID 2)
  • 每个 PCIe Port 拥有独立的复位域(Fundamental Reset)时钟源(Clock Input)

🎯 关键分析:

特性 图示说明
控制器数量 两个,各自位于不同 PCIe 端口上
共享命名空间 NS B 被两个控制器同时访问
命名空间 ID 所有访问共享命名空间的控制器使用一致的 NSID(NSID 2)
复位隔离 复位 Port X 不影响 Port Y 的控制器和命名空间
多路径支持 支持,且是物理链路完全独立的路径
命名空间行为 与图 17 相同,共享空间的 Identify Namespace 数据结构一致

🧠 实际意义:

图 18 是实际部署中 最常见的企业级 NVMe 多路径 I/O 场景,尤其适用于冗余主机(HA)、双路服务器等系统。

特点是: - 每个端口可连接至不同 CPU socket 或主机控制器 - 某一侧控制器失效或复位时,另一端仍可访问共享命名空间 - 利用共享 NS 实现高可用(HA)和路径冗余(redundancy)


✅ 图 19:支持 SR-IOV 的 NVM 子系统结构(单根 I/O 虚拟化)

🔹结构描述:

             PCIe Port
                │
         ┌──────────────┐
         │ Physical Fn  │ ← PF(物理功能)
         ├──────────────┤
         │ Virtual Fn 0 │ ← VF0:私有 NS + 共享 NS F
         │ Virtual Fn 1 │ ← VF1:私有 NS + 共享 NS F
         │ Virtual Fn 2 │ ← VF2:私有 NS + 共享 NS F
         │ Virtual Fn 3 │ ← VF3:私有 NS + 共享 NS F
         └──────────────┘
  • 所有 VF 都能访问一个共享的命名空间:NS F
  • 每个 VF 还有一个私有命名空间(如 NS D、E、G、H 等)
  • 所有函数均实现一个 NVMe 控制器

🎯 SR-IOV 架构优势解读:

特性 图示说明
多控制器 1 PF + 多 VF,所有 Function 均为 NVMe 控制器
共享命名空间 所有 VF 共享 NS F(通过 NSID 一致实现)
支持虚拟化 每个 VF 可分配给不同虚拟机,实现真正的多租户独立 I/O
隔离与协作并存 VF 间彼此独立,访问共享命名空间需协作(协调同步)

🧠 SR-IOV 的现实意义:

图 19 展现了在云计算环境下如何通过 SR-IOV 提供硬件加速的 I/O 虚拟化能力,允许多个虚拟机或容器共享底层 SSD 的同时保有隔离的队列与命名空间资源。

典型应用场景:

  • 一块 SSD 给多个 KVM/QEMU 虚拟机分配 I/O 权限
  • 各 VM 各用自己的 VF,访问私有 NS 和共享 NS(如 NS F)
  • 高性能,不需通过 hypervisor 中转队列

✅ 总结对比三种图示(16、17、18、19)

对比项 图 16 图 17 图 18 图 19
控制器数量 1 2 2 多(1 PF + 多 VF)
端口数量 1 1 2(独立复位) 1
命名空间共享
多路径 I/O ✅(更独立) ✅(虚拟路径)
虚拟化支持 ✅(SR-IOV)

✅ 下一步推荐学习路径:

  1. §8.26 – Virtualization Enhancements
  2. 理解 Primary Controller 和 Secondary Controller 的协调机制

  3. §5.22 – Namespace Attachment

  4. 如何动态地绑定/解绑命名空间到 VF 控制器

  5. §8.19 – Reservations

  6. 多控制器或多主机共享命名空间时,如何进行访问协调与互斥机制

如果你有实际部署需求或在做虚拟化 / 多路径 I/O 项目,我也可以帮你出一个配置建议或测试用例设计模板!你现在想继续学习哪部分?比如:

  • 命名空间共享的写入一致性策略?
  • SR-IOV 多虚机并发访问性能优化?
  • 如何利用 Identify Controller 检测共享关系?

欢迎继续交流,我们可以深入下一个章节 🚀