管理命令集 - ✅ 一、设备自检命令处理流程(Figure 172) (第173页)
NVME2.0协议解读 1 min read

管理命令集 - ✅ 一、设备自检命令处理流程(Figure 172) (第173页)

Blog Author

我们继续深入分析 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
    1. 验证命令参数;
    2. Current Device Self-test Status 设为 1h
    3. 启动自检操作;
    4. 完成命令,返回成功。
  • 扩展自检(2h
    1. 验证命令参数;
    2. Current Device Self-test Status 设为 2h
    3. 启动扩展自检操作;
    4. 完成命令,返回成功。

3. 厂商自定义操作(Eh

  • 根据厂商定义的自检类型,控制器会执行厂商特定的自检过程。

✅ 二、命令完成状态值Figure 173

命令完成后,控制器会向 Admin Completion Queue 提交一个 CQE(Completion Queue Entry),指示命令状态。

状态值定义:

描述
1Dh Device Self-test in Progress:表示控制器或 NVM 子系统已经正在执行一个自检操作。此时再尝试发起新的自检操作时,返回此状态。

✅ 三、命令完成后的状态处理

在执行 Device Self-test 命令时,根据处理的自检类型,控制器会采取不同的步骤来更新 Device Self-test LogCurrent Device Self-test Status,并最终完成命令。

  1. 启动自检时,命令会成功完成并启动自检操作,同时更新相关的日志和状态。
  2. 中止自检时,控制器会停止当前自检,并记录相关信息,最后返回命令成功的完成状态。

🧠 学习总结

操作类型 处理步骤 状态 描述
短时自检 (1h) 验证参数、启动自检、更新状态 1h 启动短时自检操作
扩展自检 (2h) 验证参数、启动自检、更新状态 2h 启动扩展自检操作
厂商自定义 (Eh) 按厂商定义处理 Eh 启动厂商自定义的自检
中止自检 (Fh) 中止自检、记录日志、更新状态 0h 中止自检操作,更新日志并返回成功
自检进行中 (1Dh) 返回错误 - 控制器或 NVM 子系统正在执行自检

📚 扩展学习建议

如果你希望更深入地了解以下内容,欢迎继续提问:

  • Device Self-test Log 的详细结构和日志更新机制;
  • 不同自检类型的实现差异(短时 vs 扩展 vs 厂商自定义);
  • 如何处理自检过程中的资源冲突,如与其他命令的并发性问题;
  • 与 SMART/Health 日志结合使用,如何查询和解释自检结果。

这些可以帮助你更好地理解设备自检的全生命周期和其在 NVMe 设备中的实际应用。你希望继续深入探讨哪些方面呢?