队列模型 - 📘 控制器初始化流程(续)——共 12 步 (第120页)
NVME2.0协议解读 1 min read

队列模型 - 📘 控制器初始化流程(续)——共 12 步 (第120页)

Blog Author

我们继续深入分析 NVM Express® Base Specification, revision 2.0b 第 109 页 内容,这一页主要阐述了 控制器初始化完整步骤,具体包括确定支持的命令集、配置控制器寄存器、启用控制器、创建 I/O 队列以及异步事件配置等。


📘 控制器初始化流程(续)——共 12 步

以下是控制器从重置后完全可用的推荐初始化过程,共分为 12 个步骤,每一步都至关重要:


✅ 步骤 3:确定支持的 I/O 命令集

  • 读取 CAP.CSS 字段:用于指示控制器支持哪些命令集(Command Sets Support)。
  • 配置 CC.CSS 字段:主机根据支持情况,配置控制器当前使用的命令集:
  • CAP.CSS[7]=1CC.CSS = 111b(表示支持多个命令集)
  • CAP.CSS[6]=1CC.CSS = 110b(表示支持 Zoned Namespace Command Set)
  • CAP.CSS[6]=0 且 CAP.CSS[0]=1CC.CSS = 000b(仅支持 NVM Command Set)

✅ 步骤 4:配置控制器设置(CC 控制器配置寄存器)

  • CC.AMS:选择仲裁机制(如轮询、加权轮询、供应商自定义等)
  • CC.MPS:设置内存页大小(Memory Page Size)

✅ 步骤 5:启用控制器

  • 设置 CC.EN = 1,开启控制器。

✅ 步骤 6:等待控制器准备就绪

  • 通过轮询 CSTS.RDY == 1 来判断控制器是否已经准备好处理命令。

✅ 步骤 7:识别控制器配置

  • 向控制器发送 Identify 命令,CNS = 01h,获取 Identify Controller 数据结构。

✅ 步骤 8:确定 I/O 命令集特定配置

8a)如果是 NVM 命令集(CC.CSS=000b

  • 逐个命名空间发送 Identify (CNS = 00h),识别每个命名空间的基本信息。

8b)如果支持多个 I/O 命令集(如 CAP.CSS[6] = 1)

  1. 发送 Identify(CNS = 1Ch)获取支持的 I/O Command Set 描述结构。
  2. 使用 Set Features(FID = 19h)设置启用的 I/O Command Set 组合。
  3. 针对启用的每个命令集:
  4. 使用 Identify (CNS = 07h) 获取命名空间列表(根据 CSI 值区分命令集)。
  5. 对每个 NSID 执行:
    • 如果是 NVM 或基于 NVM 的命令集(如 ZNS),则发送 Identify (CNS = 00h)
    • 同时发送其他 Identify 命令获取:
    • I/O 命令集特定的命名空间结构;
    • I/O 命令集特定的控制器结构;
    • 命令集无关的命名空间结构。

✅ 步骤 9:确定支持的 I/O 队列数量

  • 使用 Set Features(FID = 07h)配置和查询 I/O Submission 和 Completion Queue 的数量。
  • 配置中断(如 MSI / MSI-X)来支持多队列异步通知。

✅ 步骤 10:创建 I/O Completion Queues

  • 依据主机需求和控制器支持数量,通过 Create I/O Completion Queue 命令创建相应数量的完成队列。

✅ 步骤 11:创建 I/O Submission Queues

  • 同理,根据系统配置和控制器支持,发送 Create I/O Submission Queue 命令创建提交队列。

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

  • 使用 Set Features 命令设置要启用的异步事件种类(例如健康状态变化、命名空间变化等),以便在事件发生时控制器可以通知主机。

🧠 总结与关键理解点

步骤 要点
步骤 3 确定并设置控制器支持的命令集(CSS)
步骤 4-6 配置并启用控制器,确保其准备就绪
步骤 7-8 获取控制器与命名空间的结构信息,尤其是多命令集支持的处理
步骤 9-11 创建并配置多队列结构,用于高并发 I/O
步骤 12 启用异步事件通知,提升系统智能响应能力

如果你希望进一步了解某个子步骤(比如 Identify 命令结构、MSI-X 的配置细节,或 CSS/CSI 选择策略),我可以为你展开讲解!是否想继续阅读下一页?或者深入某一部分?