命名空间管理与配置 - 第124页
下面是对 《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 NVM、Sanitize、Security Receive/Send 等。 |
| Vendor Specific | 厂商自定义命令也可以返回此状态码,具体取决于实现。 |
❓ 为什么这些命令可以返回 Admin Command Media Not Ready?
在 NVMe 规范中,很多命令(例如获取日志、格式化命名空间、设备自检等)并不总是需要所有介质处于就绪状态才能执行。这些命令可能涉及对存储设备的查询、诊断或配置操作,允许控制器在某些介质尚未完全准备好的情况下返回“介质未准备好”状态码,并等待介质准备好之后再进行重试。
🌟 控制器就绪模式(Controller Ready Modes)
✅ CAP.CRMS 字段与控制器就绪模式
控制器就绪模式由 CAP.CRMS 字段控制,定义了控制器在就绪时的行为。该字段有两个主要部分:
- CAP.CRMS.CRWMS(Controller Ready With Media Support):指示控制器是否支持“含介质的就绪”模式。
- 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,以选择适当的模式。 |
📘 控制器就绪模式的工作机制
-
Controller Ready With Media:在该模式下,控制器在就绪时确保所有命名空间和介质均准备就绪,且可以处理所有命令。对于未准备好的介质或命名空间,返回
Admin Command Media Not Ready错误,并且设置Do Not Retry标志为0,表示可以重试。 -
Controller Ready Independent of Media:在该模式下,控制器可以在没有介质完全准备好的情况下变为“就绪”。控制器将继续处理命令,但对依赖介质的命令,仍可能返回
Admin Command Media Not Ready状态码。主机软件需处理这种返回,并在CRWMT时间内进行重试。 -
如何选择模式:主机可以通过设置 CC.CRIME 来选择是否使用“不依赖介质的就绪”模式。该模式的支持与 CAP.CRMS 字段密切相关,主机软件必须根据控制器的支持情况设置该字段。
✅ 如何使用这些信息?
💡 开发中的注意点:
- 在开发主机软件时,务必检查 CAP.CRMS 字段,以确保你的主机软件能够识别控制器的就绪模式。
- 对于支持 Controller Ready Independent of Media 模式的控制器,软件应考虑到在控制器就绪后仍可能会遇到介质未准备好的情况,并设计相应的错误处理和重试机制。
- 在处理
Admin Command Media Not Ready状态时,软件应确保Do Not Retry标志为0,以便控制器能根据实际情况进行重试。
📝 实战建议:
- 调试阶段:在测试过程中,观察
Get Log Page或Format NVM等命令,确保它们能够正确处理Admin Command Media Not Ready状态码,并在介质准备好后进行重试。 - 错误处理:对于不同的命令类型,要清楚哪些命令允许在介质未准备好的情况下返回该状态码,以及如何处理返回值。例如,执行设备自检时可能需要返回此错误码,确保主机能够处理这些特殊情况。
如果你想深入理解 CRTO.CRWMT 的字段或 Get Log Page 中不同日志类型的详细处理,我可以继续带你分析相关部分,帮助你更好地掌握协议细节。是否继续进行深入学习?