第4章 消息服务模型与控制原语 - 页码79
我们继续深入分析 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 List 是 AEM 数据 中的核心数据结构,记录了所有已发生的异步事件。
- 每个 AE Occurrence 数据结构 表示一个事件的详细信息(例如,事件类型、时间戳、事件优先级等)。
✅ 四、AEM 传输时的注意事项
- AEM 的传输时机:管理端点在 AE Armed 状态 下,一旦发生异步事件(AE),将在下一个 AEM 传输时间间隔(AEM Transmission Interval) 内传输 AEM。
- 重试机制:如果 AEM 传输失败且未收到 AEM Ack,管理端点将在 AEM Retry Delay 指定的延迟时间后进行重试,最多重试 8 次。
✅ 五、实战示例:健康状态变化的 AEM 传输
假设设备的健康状态发生变化,并触发一个 AEM。
- AEM 数据的构建:
- 当健康状态变化时,管理端点会生成 AEM 数据,其中包含 AE Occurrence List 数据结构,记录健康状态变化的事件。
-
事件数据将包括事件类型(如健康状态变化)、时间戳和其他相关信息。
-
AEM 传输:
- 生成的 AEM 会在下一个 AEM 传输时间间隔 内传输,并发送到 引发 AE Arm 的实体,例如主机或管理控制器。
-
AEM 传输头部 根据协议要求设置,特别是 PCIe VDM 管理端点 会根据 PCI Target ID 和 Type 字段 设置路由。
-
AEM 传输成功后:
- 如果 AEM 传输成功,健康状态变化的事件会被成功通知。
- 如果发生了 传输失败,设备会重试最多 8 次,直到 AEM 成功传输或收到 AEM Ack。
✅ 六、总结
字段/结构 | 说明 | 特点 |
---|---|---|
MIC(消息完整性检查) | 用于确保数据传输的完整性 | 防止数据被篡改 |
AED(异步事件数据) | 包含 AE 发生的数据结构 | 记录发生的异步事件 |
MCTP 数据包头 | 由管理端点设置,遵循 MCTP 基本规范 | 包括消息标签、目标端点 ID 等 |
AEM 重试机制 | 如果 AEM 传输失败,最多重试 8 次 | 保证可靠传输 |
AEM 传输时机 | 必须在 AEM 传输时间间隔内发送 | 及时传输 |
通过这些细节,你可以更好地理解 AEM 传输的工作原理,以及在 NVMe-MI 协议中如何处理异步事件的通知和数据传输。如果你有任何进一步的问题或想要更深入的示例,随时告诉我!