附录与参考资料 - 第441页
NVME2.0协议解读 1 min read

附录与参考资料 - 第441页

Blog Author

我们现在进入 NVMe 2.0b 规范第 8.26 节 - Virtualization Enhancements(虚拟化增强),这是该规范中非常关键、但也偏进阶的部分,适用于构建支持多控制器虚拟化环境(如 SR-IOV 或嵌入式虚拟主机环境)的系统。


📘 中文深入分析与学习指导:虚拟化增强 Virtualization Enhancements(第 8.26 节)


🎯 核心目的:

NVMe 子系统支持多个控制器,以服务多个虚拟或物理主机,每个主机通过一个控制器获得直接 I/O 访问。虚拟化增强机制允许在主控制器(Primary)与从控制器(Secondary)之间动态分配资源


🧩 控制器的两类角色

类型 描述
主控制器(Primary Controller) 支持虚拟化管理指令,拥有资源分配权限,可向从控制器分配资源
从控制器(Secondary Controller) 不能主动管理资源,仅在离线状态下接受主控制器分配的资源

📦 支持的虚拟资源类型(Controller Resource Types)

  1. Virtual Queue Resource(VQ)
  2. 管理一个 Submission Queue + Completion Queue
  3. 详见 §8.26.1

  4. Virtual Interrupt Resource(VI)

  5. 管理一个中断向量
  6. 详见 §8.26.2

🧠 资源类型分类:Private vs Flexible

类型 描述
Private Resources(私有资源) 永久性分配,不支持动态分配,支持 Virtualization Management
Flexible Resources(灵活资源) 可通过主控制器动态分配给从控制器,支持 Virtualization Management 指令

主控制器:可以同时拥有 Private 和 Flexible 资源,但 Private 的编号一定从 0 开始并连续分布。 ✅ 从控制器要么全是 Flexible,要么全是 Private,不能混合使用。 📏 所有资源 ID(如队列 ID 或中断向量 ID)在分配时必须连续,从 0 开始,不能有间隙


📘 控制器资源分配模型(以图 478 为例)

让我们用文字模拟图 478 的模型逻辑:

资源类型:Virtual Interrupt Resource (VI)
资源总量:16 个
系统结构:


| 控制器 | 类型     | 资源 ID 范围 | 是否可动态分配 |
|--------|----------|----------------|----------------|
| 主控制器 | Private | 0 - 3         | ❌ 不可变更     |
| 主控制器 | Flexible| 4 - 11        | ✅ 可重新分配   |
| 从控制器A | Flexible| 0 - 1         | ✅ 可重新分配   |
| 从控制器B | Flexible| 0 - 1         | ✅ 可重新分配   |
  • 资源由主控制器使用 Virtualization Management 命令 来分配或回收。
  • 资源变更必须在 Controller Level Reset(控制器级重置)之后生效,但不包括 CC.EN 置 0 的软重置。
  • 从控制器必须处于 Offline 状态才允许修改其资源分配。

🧪 主机如何发现从控制器?

主机可以向主控制器发送 Identify 命令,选择 Secondary Controller List,获取与该主控制器关联的所有从控制器。


🔁 操作总结:

✅ 分配资源:

  • 由主控制器使用 Virtualization Management 命令执行。
  • 只能操作 Flexible Resource。
  • 从控制器必须 Offline。

✅ 修改资源配置:

  • 生效时间点:必须经历 Controller Level Reset(非软件 EN 清零)。

❌ 不支持的行为:

  • 主机不能直接通过从控制器进行资源配置。
  • 从控制器不能在 Online 状态变更资源。
  • 资源 ID 不允许出现“洞”(必须从 0 起连续编号)。

📎 实际用途示例(适用于哪些场景)?

场景 说明
SR-IOV 虚拟化 每个虚拟函数作为一个 Secondary Controller,分配专属队列和中断资源
多主机共享 SSD 类似云服务器共享 NVMe 盘,控制器 A/B/C 分别服务不同 VM
虚拟主控芯片管理 嵌入式系统中,主芯片管理资源,从芯片仅响应指令

🧭 下一步推荐阅读:

  • §8.26.1 — Virtual Queue Resource(详细定义 VQ 资源的结构与管理方式)
  • §8.26.2 — Virtual Interrupt Resource
  • §5.28 — Virtualization Management 命令格式
  • §3.2.4 — Domain 结构与 Reset 行为对 Virtualization 的影响

如果你有打算开发多控制器支持的 NVMe 子系统,或做 SR-IOV 虚拟化驱动支持,这一节就是核心指导。

需要我下一步继续深入讲解 Virtualization Management 命令格式(5.28 节) 吗?还是我们先看看 VQ / VI 的结构定义