第4章 消息服务模型与控制原语 - 页码79
NVMe-MI 1 min read

第4章 消息服务模型与控制原语 - 页码79

Blog Author

我们继续深入分析 NVM Express® Management Interface Specification, Revision 2.0第 80 页,这一页主要描述了 Asynchronous Event Message (AEM) 的格式和字段,包括如何构建 AEM、如何填充各个字段,以及与其他协议(如 PCIe VDM 和 2-Wire)相结合的要求。


✅ 一、Asynchronous Event Message (AEM) 格式

1. AEM 数据结构概览

AEM 结构如下:

  • AEM 数据字段(Asynchronous Event Data):用于承载 AE Occurrence List 数据结构,这是记录异步事件发生的实际数据。
  • 消息完整性检查(Message Integrity Check,MIC):用于确保 AEM 数据的完整性。
  • 消息类型(Message Type):标识消息类型,通常是异步事件相关的消息。

2. AEM 格式的字段说明

Message Integrity Check(MIC)

  • MIC 用于验证消息数据的完整性,确保数据在传输过程中未被篡改。
  • AEM 格式 中,MIC 字段会根据 Section 3.1 进行具体定义和处理。

Asynchronous Event Data(AED)

  • AED 字段包含 AE Occurrence List 数据结构,该结构列出了已发生的所有异步事件。
  • 如果只发生了一个事件,则该字段的长度仅为 一个 AE Occurrence 数据结构的大小 加上 AE Occurrence List Header 的大小。

3. AEM 传输和头部要求

  • MCTP 数据包头(Message Control Transport Protocol header):
  • 需要遵循 MCTP 基本规范
  • 消息标签(Msg tag):由管理端点选择,Tag Owner bit 设置为 1,因为 AEM 来自管理端点。
  • 目标端点 ID(Destination Endpoint ID):设置为最先引发 AE Arm 的实体的 源端点 ID

特定协议的头部要求

  • PCIe VDM 管理端点
  • PCI Target ID:设置为引发 AE Arm 的实体的 PCI Requester ID
  • Type 字段的 2:0 位:设置为 010b,表示 PCIe 消息路由方式为通过 ID 路由。

  • 2-Wire 管理端点(SMBus 或 I3C 模式)

  • 没有特殊的传输头部字段要求。

✅ 二、AEM 的构建和传输

1. AEM 数据的构建

  • AEM 数据字段(Asynchronous Event Data) 必须包含 AE Occurrence List 数据结构
  • 如果有多个事件发生,AE Occurrence List 数据结构 的大小会随之增加。
  • 数据结构从 AEM 的 Asynchronous Event Data 字段的偏移量 0h 开始,确保从正确的偏移位置开始填充。

2. AEM 传输要求

  • AEM 必须传输到 引发 AE Arm 的最后一个实体
  • 对于 PCIe VDM 管理端点,根据 MCTP PCIe VDM 传输绑定规范,需遵循额外的 PCIe 消息头要求

✅ 三、AE Occurrence List 数据结构(参考 Figure 61)

  • AE Occurrence ListAEM 数据 中的核心数据结构,记录了所有已发生的异步事件。
  • 每个 AE Occurrence 数据结构 表示一个事件的详细信息(例如,事件类型、时间戳、事件优先级等)。

✅ 四、AEM 传输时的注意事项

  • AEM 的传输时机:管理端点在 AE Armed 状态 下,一旦发生异步事件(AE),将在下一个 AEM 传输时间间隔(AEM Transmission Interval) 内传输 AEM。
  • 重试机制:如果 AEM 传输失败且未收到 AEM Ack,管理端点将在 AEM Retry Delay 指定的延迟时间后进行重试,最多重试 8 次。

✅ 五、实战示例:健康状态变化的 AEM 传输

假设设备的健康状态发生变化,并触发一个 AEM。

  1. AEM 数据的构建
  2. 当健康状态变化时,管理端点会生成 AEM 数据,其中包含 AE Occurrence List 数据结构,记录健康状态变化的事件。
  3. 事件数据将包括事件类型(如健康状态变化)、时间戳和其他相关信息。

  4. AEM 传输

  5. 生成的 AEM 会在下一个 AEM 传输时间间隔 内传输,并发送到 引发 AE Arm 的实体,例如主机或管理控制器。
  6. AEM 传输头部 根据协议要求设置,特别是 PCIe VDM 管理端点 会根据 PCI Target IDType 字段 设置路由。

  7. AEM 传输成功后

  8. 如果 AEM 传输成功,健康状态变化的事件会被成功通知。
  9. 如果发生了 传输失败,设备会重试最多 8 次,直到 AEM 成功传输或收到 AEM Ack

✅ 六、总结

字段/结构 说明 特点
MIC(消息完整性检查) 用于确保数据传输的完整性 防止数据被篡改
AED(异步事件数据) 包含 AE 发生的数据结构 记录发生的异步事件
MCTP 数据包头 由管理端点设置,遵循 MCTP 基本规范 包括消息标签、目标端点 ID 等
AEM 重试机制 如果 AEM 传输失败,最多重试 8 次 保证可靠传输
AEM 传输时机 必须在 AEM 传输时间间隔内发送 及时传输

通过这些细节,你可以更好地理解 AEM 传输的工作原理,以及在 NVMe-MI 协议中如何处理异步事件的通知和数据传输。如果你有任何进一步的问题或想要更深入的示例,随时告诉我!