命名空间管理 - 📘 一、补充控制器初始化的最后步骤(Memory-based Transport) (第121页)
NVME2.0协议解读 1 min read

命名空间管理 - 📘 一、补充控制器初始化的最后步骤(Memory-based Transport) (第121页)

Blog Author

我们继续深入解析 NVM Express® Base Specification, Revision 2.0b 第 110 页 内容。此页主要完成了 控制器初始化流程 的最后部分,并引入了 基于消息传输模型(Message-based Transport)控制器初始化流程


📘 一、补充控制器初始化的最后步骤(Memory-based Transport)

在上一页的基础上,第 12 步的延续如下:

✅ 步骤 12(续):启用异步事件通知

  • 主机可以在控制器 CSTS.RDY == 1 后任意时刻,提交 适量的 Asynchronous Event Request 命令(AER)
  • 这些命令用于异步接收控制器触发的重要事件通知,例如:
  • 健康状态变化;
  • 命名空间新增或移除;
  • 固件异常;
  • 断电状态提醒等。

🎯注意:提交 AER 命令的数量应合理,以确保有足够槽位接收多种并发事件。


✅ 最终状态:

完成以上步骤后,控制器即处于可接受 Admin 和 I/O 命令的就绪状态。


📘 二、控制器从 D3 低功耗状态恢复(Exit from D3)

🔋 D3 State 是 PCIe 规范中的一种深度省电状态

  • 若控制器从 D3 电源状态恢复(比如主机唤醒),需要重新执行上述初始化步骤,确保控制器重新进入正常运行状态。
  • 本质上,D3 恢复视为 重置事件,需重新设置队列和寄存器。

📘 三、基于消息传输模型的控制器初始化(Message-based Transport Controller Initialization)

📌 适用场景:

该机制应用于 NVMe over Fabrics (NVMe-oF) 协议,例如: - RoCE(RDMA over Converged Ethernet)、 - TCP over NVMe、 - Fibre Channel over NVMe 等场景。


✅ 步骤说明:

Step 1:选择 NVM Subsystem 建立连接

  • 主机选择要连接的 NVM 子系统(NVM Subsystem)

Step 2:建立 NVMe Transport 连接

  • 建立主机与子系统之间的传输层连接(TCP、RDMA 等方式),这是最底层的通信连接。

Step 3:通过 Connect 命令创建 Admin Queue 并建立 Host–Controller 关联

  • 使用 Fabrics Connect 命令 创建 Admin Queue,同时绑定控制器 ID。
  • Connect 响应中会返回:
  • Controller ID
  • AUTHREQ(是否需要身份认证)。

Step 4:如果需要认证,则进行 NVMe in-band authentication

  • 参考 8.13.2 章节的认证流程(例如 Diffie-Hellman + 加密验证);
  • 不通过认证的队列不能用于提交命令。

✅ 补充初始化步骤(适用于 Message-based Transport):

  1. 认证通过后,主机使用 Property Get/Set 命令
  2. 查询控制器能力;
  3. 设置控制器配置;
  4. 类似 Memory-based 初始化过程。

  5. 配置 CC.CSS

  6. 与 Memory-based 相同,根据 CAP.CSS 设置控制器的 Command Set 类型。
CAP.CSS 值 CC.CSS 设置 含义
bit 7 = 1 111b 支持多命令集组合
bit 6 = 1 110b 支持 Zoned Namespace 命令集
bit 6 = 0 且 bit 0 = 1 000b 仅支持传统 NVM Command Set

📊 总结对比:Memory-based vs Message-based 初始化流程

步骤 Memory-based Transport Message-based Transport
建立连接 固定在本地 PCIe 地址空间 使用 Connect 命令建立远程关联
队列创建 通过 Admin 命令手动创建 Connect 命令直接创建
参数设置 通过寄存器写入 CC, AQA 等 使用 Property Get/Set 设置
多命令集支持 CAP.CSS → CC.CSS CAP.CSS → CC.CSS
AER 配置 使用 Set Features + AER 同样适用
认证机制 可能需要 in-band 身份认证

如果你希望进一步分析 Connect 命令结构、AUTHREQ 验证过程、或是 Identify Controller 如何配合 CSS 与 CSI 完成命令集切换,我可以继续为你解读!

是否继续?或者我们深入讲解下一页的内容?