NVM子系统架构 - ✅ 图 18:两个控制器 + 两个独立 PCIe 端口的多路径共享结构 (第39页)
你已经进入了 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) |
✅ 下一步推荐学习路径:
- §8.26 – Virtualization Enhancements
-
理解 Primary Controller 和 Secondary Controller 的协调机制
-
§5.22 – Namespace Attachment
-
如何动态地绑定/解绑命名空间到 VF 控制器
-
§8.19 – Reservations
- 多控制器或多主机共享命名空间时,如何进行访问协调与互斥机制
如果你有实际部署需求或在做虚拟化 / 多路径 I/O 项目,我也可以帮你出一个配置建议或测试用例设计模板!你现在想继续学习哪部分?比如:
- 命名空间共享的写入一致性策略?
- SR-IOV 多虚机并发访问性能优化?
- 如何利用
Identify Controller
检测共享关系?
欢迎继续交流,我们可以深入下一个章节 🚀