命名空间管理与配置 - 第124页
NVME2.0协议解读 1 min read

命名空间管理与配置 - 第124页

Blog Author

下面是对 《NVM Express® Base Specification, revision 2.0b》第113页Figure 103 以及相关内容的中文深入分析与学习讲解


📘 分析重点:返回 Admin Command Media Not Ready 状态码的 Admin 命令

Figure 103 列出了哪些 Admin 命令可以返回 Admin Command Media Not Ready 状态码。这一状态码通常表示控制器的介质(如命名空间、存储介质等)尚未准备好,但命令并未失败,只是暂时不能处理。

允许返回此状态码的 Admin 命令:

Admin 命令 附加限制说明
Get Log Page 只有以下日志页面在介质未就绪时可返回 Admin Command Media Not Ready
- Device Self-test
- Firmware Slot Information
- Telemetry Controller-Initiated
- Telemetry Host-Initiated
- Predictable Latency Per NVM Set
- Predictable Latency Event Aggregate
- Persistent Event Log
- LBA Status Information
- Endurance Group Event Aggregate
- Media Unit Status
- Supported Capacity Configuration List
- Boot Partition
- Reservation Notification
- Rotational Media Information
- Vendor Specific
Namespace Management 与命名空间管理相关的命令,包括 Format NVMSanitizeSecurity Receive/Send 等。
Vendor Specific 厂商自定义命令也可以返回此状态码,具体取决于实现。

为什么这些命令可以返回 Admin Command Media Not Ready

在 NVMe 规范中,很多命令(例如获取日志、格式化命名空间、设备自检等)并不总是需要所有介质处于就绪状态才能执行。这些命令可能涉及对存储设备的查询、诊断或配置操作,允许控制器在某些介质尚未完全准备好的情况下返回“介质未准备好”状态码,并等待介质准备好之后再进行重试。


🌟 控制器就绪模式(Controller Ready Modes)

CAP.CRMS 字段与控制器就绪模式

控制器就绪模式由 CAP.CRMS 字段控制,定义了控制器在就绪时的行为。该字段有两个主要部分:

  1. CAP.CRMS.CRWMS(Controller Ready With Media Support):指示控制器是否支持“含介质的就绪”模式。
  2. CAP.CRMS.CRIMS(Controller Ready Independent of Media Support):指示控制器是否支持“不依赖介质的就绪”模式。

CAP.CRMS 字段的具体值及其含义如下:

CAP.CRMS 值 模式说明
00b 不支持任何控制器就绪模式
01b 仅支持“含介质的就绪模式”(Controller Ready With Media)
11b 支持两种控制器就绪模式,主机可以选择使用其中的一种模式

CC.CRIME 字段与选择控制器就绪模式

CC.CRIME 字段控制着控制器的就绪模式。该字段的行为取决于 CAP.CRMS 字段的设置。

CAP.CRMS 设置 控制器就绪模式 CC.CRIME 设置要求
00b 不支持控制器就绪模式 CC.CRIME 应为 0,且主机软件应忽略该字段。
01b 仅支持“含介质的就绪模式” CC.CRIME 应为 0
11b 支持两种模式,主机可选择 主机应在控制器启用之前设置 CC.CRIME,以选择适当的模式。

📘 控制器就绪模式的工作机制

  1. Controller Ready With Media:在该模式下,控制器在就绪时确保所有命名空间和介质均准备就绪,且可以处理所有命令。对于未准备好的介质或命名空间,返回 Admin Command Media Not Ready 错误,并且设置 Do Not Retry 标志为 0,表示可以重试。

  2. Controller Ready Independent of Media:在该模式下,控制器可以在没有介质完全准备好的情况下变为“就绪”。控制器将继续处理命令,但对依赖介质的命令,仍可能返回 Admin Command Media Not Ready 状态码。主机软件需处理这种返回,并在 CRWMT 时间内进行重试。

  3. 如何选择模式:主机可以通过设置 CC.CRIME 来选择是否使用“不依赖介质的就绪”模式。该模式的支持与 CAP.CRMS 字段密切相关,主机软件必须根据控制器的支持情况设置该字段。


如何使用这些信息?

💡 开发中的注意点:

  • 在开发主机软件时,务必检查 CAP.CRMS 字段,以确保你的主机软件能够识别控制器的就绪模式。
  • 对于支持 Controller Ready Independent of Media 模式的控制器,软件应考虑到在控制器就绪后仍可能会遇到介质未准备好的情况,并设计相应的错误处理和重试机制。
  • 在处理 Admin Command Media Not Ready 状态时,软件应确保 Do Not Retry 标志为 0,以便控制器能根据实际情况进行重试。

📝 实战建议:

  1. 调试阶段:在测试过程中,观察 Get Log PageFormat NVM 等命令,确保它们能够正确处理 Admin Command Media Not Ready 状态码,并在介质准备好后进行重试。
  2. 错误处理:对于不同的命令类型,要清楚哪些命令允许在介质未准备好的情况下返回该状态码,以及如何处理返回值。例如,执行设备自检时可能需要返回此错误码,确保主机能够处理这些特殊情况。

如果你想深入理解 CRTO.CRWMT 的字段或 Get Log Page 中不同日志类型的详细处理,我可以继续带你分析相关部分,帮助你更好地掌握协议细节。是否继续进行深入学习?