错误处理与诊断 - 第433页
NVME2.0协议解读 1 min read

错误处理与诊断 - 第433页

Blog Author

我们继续深入中文解析 NVM Express® Base Specification Revision 2.0b,现在从第 8.21 节末尾部分进入第 8.22 节的解读。


📚 第 8.21(续)Sanitize 操作支持、限制与异常处理机制


✅ 控制器对 Sanitize 的支持要求:

若控制器声明支持 Sanitize 命令,则必须:

  • 支持至少一种 Sanitize 类型:Block Erase、Overwrite 或 Crypto Erase;
  • 所有控制器支持的类型要保持一致;
  • 在 Identify Controller 的 Sanitize Capabilities 字段中准确声明支持类型

🔧 Sanitize Config Feature 的影响(FID = 0x84)

其中的 NODRM(No-Deallocate Response Mode)位 表示:

如果控制器的 Sanitize Capabilities 指出 不支持 No-Deallocate After Sanitize(NDI=1),那当主机发起设置该位为 1 的 Sanitize 命令时,该怎么办?

模式 行为
Error Response Mode 控制器直接拒绝命令,返回 Invalid Field in Command。
Warning Response Mode 控制器接受命令,若成功执行,则 Sanitize Status bits[2:0] = 100b,表示“有警告”。

🚫 Sanitize 执行期间的限制行为

🔄 情况一:Sanitize 正在进行中

此时,NVM 子系统所有控制器只能执行以下操作:

  • 仅允许执行 Admin 命令表(见 Figure 139)中列出的命令;
  • 所有 I/O 命令(除 Flush)一律被拒绝,返回状态码:Sanitize In Progress
  • Flush 的行为定义详见 7.1;
  • 所有未明确允许的命令一律被拒绝;
  • 禁止启用 PMR(Persistent Memory Region):
  • 设置 PMRCTL.EN = 1 不会使 PMRSTS.NRDY 变为 0,表示 PMR 不可用。

🚨 情况二:Sanitize 失败,尚未恢复

此状态下,控制器处于 “失败恢复模式”:

  • Sanitize 命令和 Admin 命令表中列出的命令,全部命令都被拒绝
  • 所有 I/O 命令(除 Flush)被拒绝,返回 Sanitize Failed
  • PMR 依旧不能启用;
  • 只有 再次启动 Sanitize 命令 或执行 “退出失败模式”(Exit Failure Mode) 才能恢复。

📦 第 8.22:Submission Queue (SQ) Associations 提交队列关联机制


🎯 定义目的:

Predictable Latency Mode(PLM) 启用时(详见 8.16),某些命令可具有 确定性延迟。此时,SQ Associations 提供一种机制:提示控制器哪些 I/O Submission Queues 是用于哪个 NVM Set 的

这让控制器在调度与资源分配方面更加智能化,有助于:

  • 保持 QoS 一致性;
  • 提升 PLM 模式下的性能表现。

🧩 特点总结:

特性 是否强制
SQ Associations 能力是可选
PLM 功能是否依赖它?
是否能提升控制器决策能力?

📝 补充理解建议:

虽然这个功能本身是“提示性质”,但在高负载或多 NVM Set 并行环境下,它对减少 jitter、提升确定性调度是非常关键的优化。


是否需要我补充:

  • Figure 139Sanitize 期间允许的 Admin 命令列表(中英对照)
  • 整体 Sanitize 操作状态机图
  • 或是为第 8.21 与 8.22 生成学习用 PPT/PDF 教程?

欢迎告诉我你的偏好,我们可以系统整理 🌟