管理命令集 - ✅ 一、LID Specific Field 详解(图 205) (第189页)
NVME2.0协议解读 1 min read

管理命令集 - ✅ 一、LID Specific Field 详解(图 205) (第189页)

Blog Author

我们继续深入分析 NVM Express® Base Specification Revision 2.0b 第 178 页的内容,重点讲解 LID Supported and Effects Data Structure 中的 LID Specific Field,以及 Error Information Log(LID = 01h) 的详细结构与行为。


✅ 一、LID Specific Field 详解(图 205)

📌 LID = 0Dh(Persistent Event Log)

  • LID Specific Field 用于标识 Persistent Event Log 日志页的特定功能。
Bits 字段名 描述
15:1 Reserved 保留
0 Establish Context and Read 512 Bytes of Header Supported
- 1:控制器支持 "建立上下文并读取 512 字节头" 的操作(参考图 223)。
- 0:不支持该操作。如果设置为 1,则控制器还需支持 "Generation Number" 字段。

注意:实现版本在 NVM Express 1.4 及以后的规范中,应该将此位设置为 1
这意味着后续版本的实现必须支持此操作。


✅ 二、Error Information Log(LID = 01h)

📌 用途与功能:

  • LID = 01h 用于描述 命令错误信息与特定命令无关的错误
  • 当命令执行失败时,错误信息会被记录。如果命令的完成队列条目的状态字段中的 More (M) 位为 1,则提供扩展的错误信息。

📌 日志条目的组织:

每个日志条目占 64 字节,包含具体的错误详情。最多可记录的错误条目数由 Identify Controller 数据结构中的 ELPE 字段决定。

  • 错误日志按发生时间排序,最近的错误条目排在最前面。
  • 如果日志页已满,控制器会删除最旧的条目,并将新的错误条目添加到日志页。

✅ 三、Error Information Log Entry 结构(图 206)

字段 描述
07:00 Error Count 64 位递增的错误计数,标识该错误的唯一性。从 1h 开始,递增每个唯一的错误日志条目;如果为 0h,表示无效条目。
如果值为 FFFFFFFF_FFFFFFFFh,则该字段递增后从 1h 开始。
09:08 Submission Queue ID 表示与错误相关的命令的提交队列标识符。如果该错误与特定命令无关,则设置为 FFFFh
11:10 Command ID 表示与该错误相关的命令标识符。如果该错误与特定命令无关,则设置为 FFFFh

✅ 四、错误日志的清除与持久化

  • 控制器应在 电源重启Controller Level Reset 时清除该错误日志,即删除所有条目。
  • 错误日志支持持久化存储,错误计数器不会因为电源断开而丢失。

✅ 五、总结与学习建议

模块 学习建议
Persistent Event Log 掌握 Establish Context and Read 512 Bytes of Header 的使用条件,理解该功能如何为事件日志提供上下文和头部信息
Error Information Log 了解如何根据 More (M) 位提供错误扩展信息,掌握如何根据 Submission Queue IDCommand ID 精确定位错误来源
日志持久化与清除机制 理解错误日志的持久化和重置机制,知道在电源断电或 Reset 后日志会被清空
Error Count 的溢出处理 学习如何处理错误计数的溢出,特别是计数器的回绕与最大值管理

如果你需要我为你进一步整理:

  • 错误日志的详细解析图,帮助你理解每个字段如何映射到错误信息
  • 错误日志清除与持久化流程图,展示如何在不同情境下读取与管理错误日志

我可以立即为你绘制这些图解,帮助你深入理解 NVM Express 错误日志的管理与应用。你需要哪一部分?