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

附录与参考资料 - 第445页

Blog Author

我们继续深入分析 NVMe Base Specification Revision 2.0b 第 434 页内容,重点讲解:


🎯 本页核心内容概要:

一、Secondary Controller 的状态控制与启用条件

二、SR-IOV(Single Root I/O Virtualization)机制介绍与 NVMe 的融合

三、PF/VF(Physical/Virtual Function)与 BAR 配置规则


🧩 一、Secondary Controller 的状态与资源配置控制

✅ 启用条件:

  • 一个 controller(Primary 或 Secondary)在下列条件同时满足时为“启用状态”: CC.EN == 1 && CSTS.RDY == 1

⚠️ Secondary Controller 的特殊规则:

场景 行为
Primary Controller 被关闭或执行 Controller Level Reset 关联的 Secondary Controller 自动进入 Offline 状态
Primary Controller 执行 Shutdown 操作(见 §3.1.3.5 / 3.1.3.20) Secondary Controller 自动进入 Offline 状态
未配置足够资源(Admin Queue + 至少一个 I/O Queue + VI 向量 0) 无法从 Offline 转为 Online
SR-IOV 环境下,VF Enable = 0NumVFs 不支持某个 VF 该 VF 隐式转为 Offline 状态

⚠️ 所有资源分配(VQ / VI)都必须在 Offline 状态下完成!


🧠 二、SR-IOV(Single Root I/O Virtualization)机制简介

🌐 背景:

SR-IOV 是由 PCI-SIG 定义的虚拟化扩展标准,允许多个虚拟机(System Image)共享同一个物理 PCIe 设备而不会造成 I/O 瓶颈。

✳️ SR-IOV 的优势:绕过 hypervisor,让每个 VM 直接访问 PCIe 设备,显著提升 I/O 性能。


👥 PF 与 VF 定义:

术语 含义 说明
PF (Physical Function) 实体函数 具有完整功能,支持 SR-IOV 能力并分化 VF
VF (Virtual Function) 虚拟函数 由 PF 派生出的轻量控制器,供 VM 使用
SI (System Image) 系统镜像 虚拟机或容器等运行环境,拥有独立 VF

在 NVMe SR-IOV 场景中:

  • PF 和其派生 VF 共用 NVM Subsystem
  • 每个 VF 表现为一个独立的 NVMe Controller,完全符合 NVMe 协议规范
  • 支持多路径 I/O 与命名空间共享。

🧰 三、PF/VF 的 BAR 配置规则

📦 BAR(Base Address Register)回顾:

用于为设备映射内存资源的寄存器槽位。NVMe PF/VF 控制器遵循以下规则:

✅ PF 控制器对 VF BAR 的支持

VF BAR 编号 对应功能 要求
VF BAR0 / BAR1 / BAR4 / BAR5 映射空间与 PCI BAR0/1/4/5 类似 ✅ 必须支持
VF BAR2 MSI-X 表(MSI-X Table)与 PBA 地址空间 ❌ 不得使用 Index/Data Pair 机制
VF BAR3 同上 可用于额外的 PBA 表

🧠 MSI-X Table 和 PBA 应使用 VF BAR2 / BAR3,并声明为 64-bit prefetchable memory region。


🔐 VF 控制器的访问控制

VF 控制器的寄存器属性只有在 VF MSE = 1 时可访问。

操作 行为
VF MSE = 0(清除) 控制器属性被隐藏,但不会被重置
VF MSE = 1(设置) 控制器寄存器可访问,进入正常使用

🔁 补充说明:

项目 行为
多个 VF 使用相同 Class Code(01h / 08h / 02h) 必须实现完整 NVMe 功能
SR-IOV 不启用的系统 PF 依旧可以独立运行(即“非虚拟化模式”)
MSI-X Table 映射寄存器(MSIXCAP.MXC.TS) 仅在 Offline 状态下更新

✅ 总结:NVMe + SR-IOV 的关键融合点

项目 要点
支持 PF / VF 层级结构 PF 负责资源划分与 VF 初始化
VF 是完整的 NVMe 控制器 VM 可直接使用,无需驱动修改
Offline 必须配置资源 包括 Admin Queue、I/O Queue 和 VI 向量
VF 的 BAR 空间设计合理 特别是 BAR2/3 专用于 MSI-X
支持动态资源回收与分配 通过 Virtualization Management 命令完成
VF 的 Online 状态需满足所有前置条件 包括资源配置、寄存器状态更新等

如果你需要,我可以进一步帮助你整理一张 PF-VF 控制器结构图与资源分配示意图,或者深入分析 Virtualization Management 命令的字段定义与流程图。你想继续这部分吗?