第4章 消息服务模型与控制原语 - 页码52
我们继续深入分析 NVM Express® Management Interface Specification, Revision 2.0 规范中的第 53 页内容,涉及 异步事件消息(Asynchronous Event Messages,简称 AEMs) 和 带外请求消息处理模型。以下是详细的解释和总结。
✅ 异步事件消息(AEMs)
定义:
Asynchronous Event Message (AEM) 是由 管理端点(Management Endpoint) 向 管理控制器(Management Controller) 发送的 NVMe-MI 消息,通常用于在 异步事件(如健康状态变化、温度变化或固件激活事件) 发生时通知控制器。
- 异步事件消息 是一种 单向 传输,即管理端点发送消息后,并不等待管理控制器的回应。
- AEMs 可以使用 带外机制(out-of-band) 进行传输,但 带内隧道机制(in-band tunneling) 不支持 AEMs。
支持条件:
-
带外机制支持:异步事件消息(AEMs)可以通过带外机制传输。使用带内通信的异步事件请求(Asynchronous Event Request)命令的方式将 不支持 AEM。
-
端口级别支持:AEMs 是可选的,可以针对每个端口单独启用。例如,某个 NVM 子系统可能仅支持 PCIe 端口的 AEM,而不支持 2-Wire 端口的 AEM。
-
硬件限制:在某些平台上,管理控制器通过 2-Wire Mux 连接到管理端点。如果 2-Wire Mux 的下游通道没有连接到上游通道,则无法发送 AEM。现代平台采用 I3C hub 架构 解决了这个问题。
配置和控制:
- AEM 支持:如果某个管理端点支持 AEM,则该端点的 Asynchronous Event Messages Supported 位会设置为
1
,表示该端点可以发送 AEMs。 - 通过 配置获取命令(Configuration Get command),可以查看该端点支持哪些 异步事件(AEs),并可以配置启用或禁用这些事件。
- 每个异步事件(AE)可以通过 配置设置命令(Configuration Set command) 单独启用或禁用。
✅ 带外请求消息服务模型(Out-of-Band Request Message Servicing Model)
请求-响应模型:
在带外请求消息服务模型中,管理控制器 向 管理端点 发送请求消息(Request Message),管理端点处理请求并返回响应消息(Response Message)。在该模型中: - 管理端点不会主动生成无请求响应消息,即管理端点不会发送与之前未收到请求消息相关的响应。
命令插槽(Command Slots):
- 本规范使用 命令插槽(Command Slots) 来管理命令消息的处理。每个管理端点包含两个命令插槽,每个命令插槽具有独特的状态信息,并且有一个全局暂停标志。
- 命令插槽的状态信息和暂停标志的值可以通过 获取状态原语(Get State Primitive) 获取。
命令消息处理流程:
-
管理控制器发送命令消息:控制器向目标命令插槽发送命令消息,管理端点根据每个命令插槽分别处理 MCTP 包并组装成命令消息。
-
命令插槽的处理状态:每个命令插槽在处理过程中会被锁定,直到命令消息的处理完成。
命令插槽冲突处理:
如果一个命令插槽当前不是 空闲(Idle) 状态,并且接收到新的命令消息:
- 管理端点会设置 CMNICS 位为 1
(表示命令插槽的状态已被改变)。
- 管理端点将会执行 隐式中止控制原语(Implicit Abort Control Primitive),即会取消当前命令的执行并转移到下一个命令。但不会发送中止控制原语响应消息(Abort Control Primitive Response Message)。
如果命令无法中止:
- 如果 命令无法被中止(例如,正在进行的操作无法提前终止),则管理端点将:
- 继续执行 当前命令,直到命令完成。
✅ 图示总结:
字节范围 | 字段 | 说明 |
---|---|---|
0~3 | Message Integrity Check | 完整性校验字段 |
4 | Status | 状态,表示 AEM 或其他消息的处理状态 |
5~7 | Reserved | 保留字节 |
8 | AEM / Command Slot 相关字段 | 包含 AEM 或命令插槽的状态信息 |
🔍 核心总结:
-
异步事件消息(AEMs):AEMs 通过带外机制传输,不需要管理控制器回应。它们用于通知控制器系统发生了某些异步事件,例如健康状态变化、温度变化等。
-
AEM 配置:管理端点支持 AEMs 时,能够启用或禁用特定的异步事件,通过配置命令进行设置。
-
带外请求消息模型:管理控制器发送请求消息,管理端点处理并返回响应消息。在此过程中,管理端点不会主动发送无请求的响应消息。
-
命令插槽处理:命令插槽用于命令消息的处理。如果插槽正忙并接收到新命令,管理端点会执行隐式中止,但不会返回中止响应。
如果你希望进一步了解 异步事件 的具体实现方式,或希望了解命令插槽如何处理多个并发命令,我可以继续为你提供更详细的示例和分析。