错误处理与诊断 - 第402页
我们继续对 NVMe Base Specification 2.0b 第 8.15 节 最后一部分进行深入解析,特别聚焦以下两个方面:
- ✅ 主机动态电源管理操作机制
- ❌ 非运行电源状态(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-test、Sanitize 命令 |
| 后台维护任务 | 由 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),我可以立即继续。
是否需要我补全这部分内容,或者你已经准备好进入下一章?