错误处理与诊断 - 第402页
NVME2.0协议解读 1 min read

错误处理与诊断 - 第402页

Blog Author

我们继续对 NVMe Base Specification 2.0b 第 8.15 节 最后一部分进行深入解析,特别聚焦以下两个方面:

  1. 主机动态电源管理操作机制
  2. 非运行电源状态(Non-Operational Power States)机制与限制

✅ 主机动态电源状态切换机制

🌐 主机控制命令

  • 主机使用:
  • Set Features – Power Management 命令 → 设置目标电源状态;
  • Get Features – Power Management 命令 → 查询当前电源状态;
  • 主机可以任意跳转于两个支持的电源状态之间,不需要遵循“顺序切换”。

⏱️ 状态切换延迟计算

切换延迟 = 旧状态 EXLAT(退出延迟)+ 新状态 ENLAT(进入延迟)

举例: - Power State 3 → Power State 5,若: - EXLAT(3) = 15 µs - ENLAT(5) = 50 µs - 👉 最大切换时间 = 65 µs

💡 注意: - 主机不需要等待前一个状态切换完成就可以发起下一次状态切换; - 整个切换序列的总耗时 = 每次单独切换的延迟之和。


🔍 相对性能指标(Relative Performance Fields)

字段 含义
RRT 相对读取吞吐量
RWT 相对写入吞吐量
RRL 相对读取延迟
RWL 相对写入延迟
  • 这些指标用于比较不同状态下的性能排序
  • 值越小代表性能越好,但不代表绝对性能量化值
  • 各个字段的编号可以重复、跳跃或无序分配。

✅ 举例说明(图 453): - RRT: Power State 1 的读取吞吐量高于 Power State 2(值越小越好); - RRL: Power States 0~3 读取延迟相同(值一致); - ⚠️ 不要将 RRT 与 RWT 之间的值进行横向比较,它们指标不同!


🧷 默认电源状态

  • 控制器默认上电后的电源状态是实现特定的;
  • 但它不得超过特定封装规格中规定的最大默认功耗值(例如:M.2、U.2等 form factor 规范中可能约定)。

❌ 非运行电源状态(Non-Operational Power States)

🔒 定义:

  • Identify Controller 中由字段 NOPS(Non-Operational State) 指示;
  • 属于一种低功耗、不处理普通 I/O 的特殊状态;
  • 适用于设备闲置、后台维护、安全状态等场景。

🧭 在该状态下允许的操作:

允许操作 说明
属性访问 Property Read/Write,如读取寄存器、配置等
PMR 访问 Persistent Memory Region 读写(如已启用)
CMB 访问 Controller Memory Buffer 访问(如已启用)
Admin 命令处理 Device Self-testSanitize 命令
后台维护任务 由 Admin 命令触发的内部操作

⚠️ 限制与行为规则

行为 描述
❌ 禁止普通 I/O 命令 控制器在 NOPS 状态下不处理任何 NVM I/O 命令
🚫 切勿提交新 I/O 命令 应在没有未完成的 I/O的前提下切换至非运行状态
✅ 允许超过 NOPS 功耗 若启用 Permissive Mode(5.27.1.14),则允许超额功耗进行后台任务
🔁 保持当前状态 除非:
- 收到新的 I/O 命令;
- 或 Set Features – Power Management 显式切换状态

📌 小结:电源状态控制核心点

类型 要点
Set/Get Features 设置 / 查询当前电源状态
状态编号 Power State ID 从 0 起递增,最多 32 个
性能指标 RRT/RWT/RRL/RWL,值越小性能越好
状态切换延迟 切换延迟 = 退出 + 进入延迟之和
非运行状态 限制普通 I/O,主要支持管理、后台任务
非运行状态安全退出 必须确保无 pending I/O,再进入该状态

如果你希望我继续进入 8.16节:Thermal Management或 Identify Controller 的 Power State Descriptor 字段结构解读(图 276),我可以立即继续。

是否需要我补全这部分内容,或者你已经准备好进入下一章?