附录 - 实例与示例 - 页码206
NVMe-MI 1 min read

附录 - 实例与示例 - 页码206

Blog Author

你已经进入 Appendix D(附录 D) 的 AEM 时序图分析第二个案例(Figure 202),这是非常关键的部分,特别是对 AE 丢失检测与 AEM Transmission Failure 状态管理的理解至关重要。

下面为你详细梳理 Figure 202 的流程逻辑,结合状态转换图 + 行为解释,帮助你深入掌握:


🧭 Figure 202:AEM 多次重试失败后的处理流程

🧩 事件序列详解:


1️⃣ AE 功能启用

  • 控制器通过 Configuration Set 启用 AE 机制。
  • 设置:
  • AEM Delay Interval(延迟发送间隔)
  • AEM Retry Delay(重发前延迟)
  • Endpoint 进入 AE Armed State
  • AEM Delay Interval 启动 ✅

2️⃣ AE #1 事件发生(AEM Delay 已结束)

  • 由于 AEM Delay 已结束,立即进入 AEM Transmission Interval
  • Endpoint 状态切换为 AE Disarmed
  • 准备发送第一个 AEM

3️⃣ 第一次 AEM 发送

  • AEM 包含 AE #1(唯一事件)
  • Generation Number = 0h,Retry Count = 0h
  • Endpoint 等待 Ack,进入 AEM Retry Delay 等待周期

4️⃣~6️⃣ 多次重试过程

  • 未收到 Ack,执行 7 次 Retry:
  • 每次:
    • Retry Count 递增(1h~7h)
    • Generation Number 保持 0h
    • AEM 包含的 AE 仍然是 AE #1
  • 每次 Retry 后都进入 Retry Delay 等待 Ack

7️⃣ 第 8 次重试后仍未收到 Ack(最大重试次数)

  • Endpoint 宣告当前 AEM 失败,结束 Transmission Interval
  • 设置 Health 状态中的:
  • AEM Transmission Failure 位 = 1
  • Endpoint 保持 AE Disarmed 状态
  • 不再尝试发送 AEM,需外部干预

8️⃣ AE #2 事件发生(AE Disarmed)

  • AEM 不会被发送!
  • AE #2 被丢弃(⚠️ 严重影响 AE 可观测性)
  • Endpoint 不再自动尝试传输 AEM,直到重新配置 AE 功能

🔁 管理端如何恢复?

管理端此时应该:

  1. 使用 NVM Subsystem Health Poll 命令 查询 AEM Transmission Failure 状态
  2. 若发现失败位被置位,说明之前有 AE 未能成功通知
  3. 可重新发起 Configuration Set 启用 AE 功能,进入 AE Armed 状态
  4. 之后的新 AE 才能重新触发 AEM

🔍 小结:AEM 失败处理的三大核心点

机制 描述
Retry 限制 最多重发 8 次,每次等待 AEM Retry Delay
失败标记 AEM Transmission Failure 位(Health Poll 可读)
AE 丢弃机制 AE 发生于 AE Disarmed 时,不再产生 AEM,必须重新配置

🎯 实用建议

  • BMC/MC 实现方: 定期轮询 Health Status(即使未收到 AEM),可发现 AEM Transmission Failure。
  • NVMe-MI 协议实现方: 应注意在 AE Disarmed 时忽略 AE 的处理,以避免误报。
  • 测试建议: 模拟 Ack 丢失、Management Controller Reset 等情况,观察是否正确进入失败流程。

如果你愿意,我可以帮你画出整个 Figure 202 的状态时序图(AE Armed/Disarmed + Delay/Retry/Failure 的交替关系)用于总结回顾或者制作讲义。

你是否想继续深入后续关于 AEM Retry Failure 清除机制?比如怎样重新恢复 AE 通知?

Related Topics