管理命令集与操作 - 第160页
我们继续深入学习并解析 NVM Express® Base Specification, revision 2.0b 中的第149页,尤其是与 Asynchronous Event Request(AER,异步事件请求) 相关的 状态码 和 Completion Queue Entry 的结构,以及 事件信息字段。
📌 一、Asynchronous Event Request 状态码和 Completion Queue Entry
1. 状态码 - Command Specific Status Values(命令特定状态值)
图 Figure 142 定义了与异步事件请求(AER)相关的几种状态码,主要用于指示异步事件请求命令是否成功完成。
| 状态码 | 描述 |
|---|---|
| 05h | Asynchronous Event Request Limit Exceeded: 超过了并发异步事件请求命令的最大数量。表示当前控制器不能处理更多的异步事件请求命令。 |
2. Completion Queue Entry Dword 0 结构(见 Figure 143)
在 AER 完成后,控制器会将 Completion Queue Entry(CQE)添加到 Admin Completion Queue,并提供有关异步事件的信息。
Dword 0 结构包含以下几个关键字段:
| Bit 区间 | 字段名 | 含义 |
|---|---|---|
| 31:24 | Reserved | 保留 |
| 23:16 | Log Page Identifier | 表示与异步事件关联的日志页的标识符,主机需要读取这个日志页来清除事件。 |
| 15:08 | Asynchronous Event Information | 根据异步事件类型(见下面的描述),提供更详细的事件信息。 |
| 07:03 | Reserved | 保留 |
| 02:00 | Asynchronous Event Type | 指示异步事件的类型,更多信息在 Asynchronous Event Information 字段中提供。 |
3. Asynchronous Event Type(异步事件类型)
Asynchronous Event Type 字段指示了事件的类型,具体类型的定义如下:
| 值 | 描述 | 参考 |
|---|---|---|
| 000b | 错误状态(Error status) | Figure 144 |
| 001b | SMART / 健康状态(SMART / Health status) | Figure 145 |
| 010b | 通知事件(Notice) | Figure 146 |
| 011b | 即时事件(Immediate) | Figure 148 |
| 100b-101b | 保留(Reserved) | - |
| 110b | I/O 命令特定状态(I/O Command specific status) | Figure 147 |
| 111b | 厂商特定事件(Vendor specific) | - |
基于 Asynchronous Event Type 字段的值,控制器将 Asynchronous Event Information 字段中的详细信息返回给主机。这些详细信息根据不同的事件类型有所不同。
📌 二、Error Status - 错误状态(见 Figure 144)
图 Figure 144 中列出了与 错误事件 相关的具体错误代码及其描述,下面我们来详细分析每个错误代码:
| 值 | 描述 |
|---|---|
| 00h | Write to Invalid Doorbell Register: 主机软件写入了一个无效的门铃寄存器,可能是一个尚未创建的队列。 |
| 01h | Invalid Doorbell Write Value: 主机软件尝试写入一个无效的门铃值,常见的原因包括: |
| - 写入的值超出了队列的地址范围; | |
| - 写入的值与之前写入的门铃值相同; | |
| - 试图向一个满的提交队列添加命令; | |
| - 试图从空的完成队列移除条目。 | |
| 02h | Diagnostic Failure: 检测到诊断失败,可能涉及自检操作。 |
| 03h | Persistent Internal Error: 发生了持续性内部错误,无法定位到特定的命令集。如果发生此错误,可能会设置 CSTS.CFS 位为 1,主机应执行重置。 |
| 04h | Transient Internal Error: 发生了瞬时内部错误,通常仅与特定命令集相关,控制器操作可能会继续,而不需要重置。 |
| 05h | Firmware Image Load Error: 固件映像加载失败,控制器回退到先前的固件映像或只读固件映像。 |
| 06h to FFh | 保留。 |
📌 三、学习总结
1. Completion Queue Entry 的重要性
- Dword 0 中的字段用于详细描述异步事件的类型和日志页信息。主机需要根据返回的 Log Page Identifier 来清除事件信息。
2. 事件类型与处理
- Error status 事件表示控制器发生错误,主机需要通过读取错误信息日志来清除事件;
- SMART / Health status 和 Notice 事件需要读取相应的健康或通知日志来清除;
- Immediate 和 Vendor specific 事件可能不具备日志页清除方式。
3. 异步事件的去重与清除
- 如果控制器发生了多个相同类型的事件,并且它们的响应是相同的,控制器会将这些事件合并为一次响应;
- 如果事件类型不同或事件响应不同,控制器会将事件保留在队列中,并依次响应后续的 AER 命令。
如果需要进一步理解某一特定事件的详细处理过程,或对某个错误状态的典型用例进行讨论,欢迎继续提问!