持久内存与安全机制 - 第367页
我们继续深入学习 NVM Express® Base Specification Revision 2.0b 第 356 页内容,涵盖两个部分:
✅ 一、扩展设备自检操作(Extended Device Self-Test Operation)
📌 执行特性与机制
⏱ 执行时间:
- 应在 Identify Controller 数据结构中的
Extended Device Self-test Time字段指定时间内完成。 - 进度通过 Device Self-Test Log 中的 Current Percentage Complete 字段 指示。
🧠 特殊能力:
- 与短自检不同,扩展自检在控制器复位或上电后能够恢复继续执行。
- 恢复后 从上次测试的段开始或重新执行上一个段(具体取决于厂商)。
🚫 中止触发条件(与短自检相似)
| 条件 | 是否中止 | 说明 |
|---|---|---|
| a) Format NVM 指令 | ✅ 中止 | 依据图 415 判定 |
| b) Sanitize 操作启动 | ✅ 中止 | 数据擦除前需停止自检 |
c) Self-test 指令的 Self-Test Code 为 Fh(中止) |
✅ 中止 | 明确指示终止 |
| d) Namespace 被移除 | 🟡 可选中止 | 控制器可根据实现选择中止与否 |
🔎 图 415 的 Format NVM 中止判断机制,在之前我们已详细解析,请参考之前笔记。
✅ 二、Directives(指令机制)
📚 定义:
Directives 是 主机与 NVMe 子系统/控制器之间信息交换机制。
Directive Receive指令:控制器 ➡ 主机;Directive Send指令:主机 ➡ 控制器;- 某些 I/O 命令(如
Write)可能携带 Directive Specific 字段,实现特定行为。
🔍 判断支持条件:
判断控制器是否支持 Directives: - 查看 Identify Controller 数据结构中的 OACS(Optional Admin Command Support)字段; - 如果支持,则需 强制支持以下内容:
| 要素 | 要求 |
|---|---|
| OACS 中标记为支持 Directives | ✅ |
支持 Directive Receive 命令 |
✅ |
支持 Directive Send 命令 |
✅ |
| 支持 Type 00h 的 Identify Directive | ✅ |
🧾 可支持的 Directive 类型(Figure 416)
| Directive 名称 | Directive Type 值 | 定义章节 | 可用于 I/O 命令? |
|---|---|---|---|
| Identify | 00h | §8.7.2 | ❌ 否 |
| Streams | 01h | §8.7.3 | ✅ 是 |
💡 总结重点
| 分类 | 内容 |
|---|---|
| 类型 | Device Self-Test & Directives |
| 扩展自检特点 | 可在重置后恢复,执行时间更长,分段结构更复杂 |
| 中止条件 | 与短自检相同(Format/Sanitize/Code Fh) |
| Directives 是什么 | 主机和控制器间的一种可扩展通信机制 |
| 支持条件 | OACS 中声明,且必须支持基本 Directive 命令 |
| 当前支持的类型 | Identify(00h),Streams(01h) |
如果你希望我接下来详细分析:
8.7.2 Identify Directive的结构与命令格式;- 或
8.7.3 Streams Directive的原理与使用场景;
可以直接告诉我,我们继续一条条解析 🔍。需要继续吗?