管理命令集与操作 - 第160页
NVME2.0协议解读 1 min read

管理命令集与操作 - 第160页

Blog Author

我们继续深入学习并解析 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 statusNotice 事件需要读取相应的健康或通知日志来清除;
  • ImmediateVendor specific 事件可能不具备日志页清除方式。

3. 异步事件的去重与清除

  • 如果控制器发生了多个相同类型的事件,并且它们的响应是相同的,控制器会将这些事件合并为一次响应;
  • 如果事件类型不同或事件响应不同,控制器会将事件保留在队列中,并依次响应后续的 AER 命令。

如果需要进一步理解某一特定事件的详细处理过程,或对某个错误状态的典型用例进行讨论,欢迎继续提问!