管理命令集 - ✅ 一、LID Specific Field 详解(图 205) (第189页)
我们继续深入分析 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 ID 和 Command ID 精确定位错误来源 |
| 日志持久化与清除机制 | 理解错误日志的持久化和重置机制,知道在电源断电或 Reset 后日志会被清空 |
| Error Count 的溢出处理 | 学习如何处理错误计数的溢出,特别是计数器的回绕与最大值管理 |
如果你需要我为你进一步整理:
- 错误日志的详细解析图,帮助你理解每个字段如何映射到错误信息
- 错误日志清除与持久化流程图,展示如何在不同情境下读取与管理错误日志
我可以立即为你绘制这些图解,帮助你深入理解 NVM Express 错误日志的管理与应用。你需要哪一部分?