管理命令集 - ✅ 一、设备自检命令处理流程(Figure 172) (第173页)
我们继续深入分析 NVM Express® Base Specification, revision 2.0b 中第 162 页的内容,特别是 Device Self-test 命令的处理流程(Figure 172)和 命令完成状态值(Figure 173)。
✅ 一、设备自检命令处理流程(Figure 172)
1. 自检进行中(Self-test in Progress)
- 当控制器正在进行自检时,如果接收到新的自检命令,控制器将依据自检代码(Self-test Code)采取不同的操作:
1h(短时自检 Short Device Self-test):如果当前已有自检进行中,控制器会返回错误,命令中止并给出 Device Self-test in Progress 错误状态。2h(扩展自检 Extended Device Self-test):类似处理,返回错误并中止命令。Eh(厂商自定义 Vendor Specific):厂商自定义的自检命令,按厂商定义进行处理。Fh(中止自检 Abort Device Self-test):如果正在进行自检操作,控制器将终止当前自检,并按照下列步骤进行处理:- 中止当前正在进行的自检操作;
- 在 Device Self-test Log 中记录日志条目,更新 Newest Self-test Result;
- 将 Device Self-test Log 中的 Current Device Self-test Status 字段设为
0h; - 完成命令,返回成功状态。
2. 自检未进行时(Self-test not in Progress)
- 短时自检(
1h):- 验证命令参数;
- 将 Current Device Self-test Status 设为
1h; - 启动自检操作;
- 完成命令,返回成功。
- 扩展自检(
2h):- 验证命令参数;
- 将 Current Device Self-test Status 设为
2h; - 启动扩展自检操作;
- 完成命令,返回成功。
3. 厂商自定义操作(Eh)
- 根据厂商定义的自检类型,控制器会执行厂商特定的自检过程。
✅ 二、命令完成状态值(Figure 173)
命令完成后,控制器会向 Admin Completion Queue 提交一个 CQE(Completion Queue Entry),指示命令状态。
状态值定义:
| 值 | 描述 |
|---|---|
| 1Dh | Device Self-test in Progress:表示控制器或 NVM 子系统已经正在执行一个自检操作。此时再尝试发起新的自检操作时,返回此状态。 |
✅ 三、命令完成后的状态处理
在执行 Device Self-test 命令时,根据处理的自检类型,控制器会采取不同的步骤来更新 Device Self-test Log 和 Current Device Self-test Status,并最终完成命令。
- 启动自检时,命令会成功完成并启动自检操作,同时更新相关的日志和状态。
- 中止自检时,控制器会停止当前自检,并记录相关信息,最后返回命令成功的完成状态。
🧠 学习总结
| 操作类型 | 处理步骤 | 状态 | 描述 |
|---|---|---|---|
| 短时自检 (1h) | 验证参数、启动自检、更新状态 | 1h |
启动短时自检操作 |
| 扩展自检 (2h) | 验证参数、启动自检、更新状态 | 2h |
启动扩展自检操作 |
| 厂商自定义 (Eh) | 按厂商定义处理 | Eh |
启动厂商自定义的自检 |
| 中止自检 (Fh) | 中止自检、记录日志、更新状态 | 0h |
中止自检操作,更新日志并返回成功 |
| 自检进行中 (1Dh) | 返回错误 | - | 控制器或 NVM 子系统正在执行自检 |
📚 扩展学习建议
如果你希望更深入地了解以下内容,欢迎继续提问:
- Device Self-test Log 的详细结构和日志更新机制;
- 不同自检类型的实现差异(短时 vs 扩展 vs 厂商自定义);
- 如何处理自检过程中的资源冲突,如与其他命令的并发性问题;
- 与 SMART/Health 日志结合使用,如何查询和解释自检结果。
这些可以帮助你更好地理解设备自检的全生命周期和其在 NVMe 设备中的实际应用。你希望继续深入探讨哪些方面呢?