第5章 管理接口命令集 - 页码109
你现在查阅到的是 图 98(续),也就是 Controller Health Status Changed Flags (CHSCF) 字段的 低 6 位(05:00) 的定义。这部分信息进一步丰富了控制器状态变化追踪的能力,是整个 NVMe-MI 健康监控机制的重要组成部分。
我们继续来做结构化解析和场景理解,帮助你深入掌握它的用途和逻辑。
✅ 图 98(下半部分):CHSCF Bit 位定义(Bits 05:00)
| Bit 位 | 字段名 | Reset 默认值 | 说明 |
|---|---|---|---|
| 05 | CECO(Controller Enable Change Occurred) | HwInit |
如果 CHDS.Controller Status 中 CECO 位的值发生变化,则将此位设为 1 |
| 04 | NSSRO(NVM Subsystem Reset Occurred) | HwInit |
如果 CHDS.Controller Status 中 NSSRO 位从 0 变为 1,此位设为 1 |
| 03 | Reserved | 0 | 保留位,不使用 |
| 02 | SHST(Shutdown Status) | 0 | 如果 CHDS.Controller Status 中 Shutdown Status 字段发生变化,则置为 1 |
| 01 | CFS(Controller Fatal Status) | HwInit |
如果 CHDS.Controller Status 中 CFS 位发生变化,则置为 1 |
| 00 | RDY(Ready) | 0 | 如果 CHDS.Controller Status 中 Ready 位发生变化,则置为 1 |
🧠 这些标志位都监控什么?
这些位基本上都对应于 Controller 的核心运行状态或健康状态:
| 状态 | 意义 |
|---|---|
| RDY(Ready) | 控制器是否处于就绪状态(CSTS.RDY) |
| CFS(Fatal Status) | 控制器是否进入致命错误状态(CSTS.CFS) |
| SHST(Shutdown Status) | 是否正在关机或关机已完成(CSTS.SHST) |
| NSSRO(Subsystem Reset) | 是否发生了 NVM Subsystem Reset |
| CECO(Enable 变化) | 控制器启用状态是否发生了变化(CC.EN) |
🔁 与 Controller Health 数据结构(CHDS)字段对应关系
我们可以补全前面位图映射关系:
| CHSCF 位 | 对应 CHDS 字段 |
|---|---|
| 00 RDY | CSTS.RDY |
| 01 CFS | CSTS.CFS |
| 02 SHST | CSTS.SHST |
| 04 NSSRO | Controller Status[NSSRO] |
| 05 CECO | Controller Status[CECO] |
这些位专门用来监控 控制器启用、关闭、复位、致命错误等系统级事件。
🔄 Reset 行为说明
💥 关键 Reset 行为总结如下:
| 类型 | 影响的对象 | 会重置哪些字段? |
|---|---|---|
| NVM Subsystem Reset | 所有 Management Endpoint + 所有 Controller | 重置对应实例的 CHSCF |
| Controller Level Reset | 目标 Controller 及其关联的 CHSCF | 同样重置相关字段 |
| Management Endpoint Reset | 目标 Management Endpoint | 重置其维护的 CHSCF 实例 |
📌 其他类型的 Reset(如 PCIe link reset)不应重置 CHSCF 字段!
💡 应用场景举例
场景 1:检测是否有控制器经历了关机
- 控制器使用
Controller Health Status Poll命令。 - 设定
SHST位为 1,CCF=1。 - 如果某个控制器在响应数据中出现,说明其
Shutdown Status在最近发生过变化。 - 下一轮轮询后,如果
CCF=1,该标志会被清除,避免重复报告。
场景 2:检测是否有致命错误发生
- 检查 CHSCF 的 bit 01 (CFS),如果值为
1,可进一步查询控制器状态位确认 CFS 位。
✅ 总结要点
| 要素 | 内容 |
|---|---|
| CHSCF 字段 | 用于标记 Controller Health 中字段的变动情况 |
| 位粒度追踪 | 包括温度变化、重启状态、就绪状态、致命错误、使能状态等 |
| 影响 Reset 范围明确 | 仅特定类型的 Reset 会清除对应实例的 CHSCF |
| 与 CHDS 联动 | 变动的字段对应在 CHSCF 中会设置为 1 |
| 配合 Poll 命令使用 | 可精确获取哪些控制器在哪些维度上发生过状态变化 |
如果你已经掌握了 CHSCF 的结构和用途,下一步我们可以一起看看 图 99 的映射位图(CHSCF 和 CHDS 之间的详细位关联表),帮助你一目了然每一位监控的对象。需要继续吗?