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

附录与参考资料 - 第443页

Blog Author

继续我们对 NVMe Base Specification Revision 2.0b 第 8.26 节的深入分析,本节页码为 第 432 页,重点内容包括两个虚拟资源类型的定义和机制:


🧩 本节结构概览

  1. 控制器及其资源支持能力要求
  2. Virtual Queue Resource (VQ 资源) 定义
  3. Virtual Interrupt Resource (VI 资源) 定义
  4. SR-IOV 与虚拟化增强功能的协同

一、控制器对虚拟化增强的支持要求

若 NVMe 子系统支持 Virtualization Enhancements,则必须具备以下条件:

🧷 主控制器必须支持:

  • 至少 两个 Private 队列对资源(Admin + 一个 I/O);
  • Identify Controller 数据结构中 OACS 字段 设置表明支持 Virtualization Management 命令
  • 实现并支持 Virtualization Management 命令
  • 支持 CNS=14h 的 Primary Controller Capabilities Structure(图 281)
  • 支持 CNS=15h 的 Secondary Controller List(图 282)
  • 支持 Namespace Management 能力(§8.11)

🧷 子控制器要求:

  • 至少有一个;
  • 其资源只能由唯一的主控制器分配;
  • 每类 Flexible Resource 只能属于一个控制器,不得共享。

二、🌀 Virtual Queue Resource(虚拟队列资源)解析

✅ 定义:

  • 一个 VQ 资源 = 一个 Submission Queue(SQ)+ 一个 Completion Queue(CQ)
  • 分配给控制器的 VQ 资源,其 资源标识符即队列标识符(Queue ID)

🧾 功能说明:

功能项 描述
是否支持 VQ 资源 Primary Controller Capabilities Structure 中 Controller Resource Types 字段指示
若不支持 所有队列资源均为 Private 类型(静态分配)
支持后 可用 Virtualization Management 命令分配给 Secondary Controller

📘 查询资源分配方式:

  • 使用 Identify(CNS=15h) 读 Secondary Controller List;
  • 或使用 Get Features - Number of Queues (FID=07h)

⚠️ 在线前置条件:

  • 未分配任何 VQ 资源,Secondary Controller 不能从 Offline 进入 Online
  • 必须分配至少两个队列对(Admin + I/O)后,方可 Online。

🧷 主控制器额外约束:

条件 原因
至少保留两个 Private 队列对 保证主控在任何时刻都能完成最基本的管理与 I/O

📍 主控动态分配自身的 VQ:

  • 使用 Virtualization ManagementPrimary Controller Flexible Allocation 动作;
  • 配置生效需 Controller Level Reset
  • 分配状态可通过 Identify(CNS=14h)Get Features(FID=07h) 查询。

三、🔔 Virtual Interrupt Resource(虚拟中断资源)解析

✅ 定义:

  • 一个 VI 资源 = 一个中断向量(如 MSI-X 向量);
  • 分配后其 资源标识符 = 中断向量编号

📘 功能说明:

功能项 描述
是否支持 VI 资源 Controller Resource Types 字段指示
若不支持 主从控制器的中断均为 Private 类型

四、SR-IOV 与 Virtualization Enhancements 的关系

若子系统同时支持:

  • SR-IOV(Single Root I/O Virtualization)
  • Virtualization Enhancements

则有如下强制规定:

控制器类型 角色
SR-IOV PF(物理功能) 必须为 Primary Controller
SR-IOV VF(虚拟功能) 必须为 Secondary Controller,隶属于对应 PF

🧠 知识巩固小结:

类型 定义 标识符 分配方式
VQ(虚拟队列) 管理一对 CQ/SQ Queue ID 动态分配
VI(虚拟中断) 管理一个中断向量 Interrupt Vector 动态分配
Primary Controller 分配资源、状态管理、执行特权命令 - 支持 Identify CNS=14h
Secondary Controller 被分配资源后才能上线 - 状态切换需 Offline 后配置

🔎 下一节建议深入:8.26.3 控制器 Online / Offline 状态机制

这部分将具体解释控制器状态切换时的流程、条件和命令使用方式。如果你准备好了,我可以继续帮你精讲这一小节。是否继续?