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

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

Blog Author

我们继续深入分析 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。

支持条件

  1. 带外机制支持:异步事件消息(AEMs)可以通过带外机制传输。使用带内通信的异步事件请求(Asynchronous Event Request)命令的方式将 不支持 AEM。

  2. 端口级别支持:AEMs 是可选的,可以针对每个端口单独启用。例如,某个 NVM 子系统可能仅支持 PCIe 端口的 AEM,而不支持 2-Wire 端口的 AEM。

  3. 硬件限制:在某些平台上,管理控制器通过 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) 获取。

命令消息处理流程

  1. 管理控制器发送命令消息:控制器向目标命令插槽发送命令消息,管理端点根据每个命令插槽分别处理 MCTP 包并组装成命令消息。

  2. 命令插槽的处理状态:每个命令插槽在处理过程中会被锁定,直到命令消息的处理完成。


命令插槽冲突处理

如果一个命令插槽当前不是 空闲(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 或命令插槽的状态信息

🔍 核心总结:

  1. 异步事件消息(AEMs):AEMs 通过带外机制传输,不需要管理控制器回应。它们用于通知控制器系统发生了某些异步事件,例如健康状态变化、温度变化等。

  2. AEM 配置:管理端点支持 AEMs 时,能够启用或禁用特定的异步事件,通过配置命令进行设置。

  3. 带外请求消息模型:管理控制器发送请求消息,管理端点处理并返回响应消息。在此过程中,管理端点不会主动发送无请求的响应消息。

  4. 命令插槽处理:命令插槽用于命令消息的处理。如果插槽正忙并接收到新命令,管理端点会执行隐式中止,但不会返回中止响应。


如果你希望进一步了解 异步事件 的具体实现方式,或希望了解命令插槽如何处理多个并发命令,我可以继续为你提供更详细的示例和分析。