持久内存与安全机制 - 第369页
我们现在继续深入学习 NVMe 2.0b 规范第 358 页 的内容,聚焦 8.7.2 Identify Directive 的两个操作:
🔍 8.7.2.1.1:Directive Receive(操作码 01h)——返回参数结构
🎯 操作功能:
使用 Directive Receive + Directive Operation = 01h(Return Parameters)操作时,控制器会返回一个 数据结构,内容包括:
- 哪些 Directive 类型被控制器支持;
- 哪些 Directive 类型在当前命名空间已启用(enabled)。
🧱 数据结构详解:Figure 419
| Bytes | Bits | 字段名称 | 描述 |
|---|---|---|---|
| 31:00 | 255:02 | Reserved | 保留位 |
| 01 | Streams Directive | 若支持 Streams Directive,该位为 1,否则为 0 |
|
| 00 | Identify Directive | 始终为 1,表示控制器支持 Identify Directive |
|
| 63:32 | 255:02 | Reserved | 保留位 |
| 01 | Streams Directive | 若已启用 Streams Directive,则该位为 1 |
|
| 00 | Identify Directive | 始终为 1,表示已启用 |
|
| 4095:64 | N/A | Reserved | 未来扩展 |
⚠️ 注意事项:
- 如果 NSID = FFFFFFFFh(即所有命名空间),控制器必须中止命令,并返回状态码:
Invalid Field in Command; - Dword 11 的 DSPEC 字段在此操作中不使用。
🧭 8.7.2.2.1:Directive Send(操作码 01h)——启用指令
🎯 操作功能:
使用 Directive Send + Directive Operation = 01h(Enable Directive)操作时,主机可对指定命名空间启用某一 Directive 类型。
🧠 启用规则:
Identify Directive总是被默认启用;- 启用其他 Directive 时,若:
NSID = FFFFFFFFh,表示应用于 整个子系统(所有命名空间 & 所有关联控制器);- 指定具体 NSID,则仅作用于该命名空间;
- 当多个控制器具有 相同非零 Host Identifier(HOSTID),则启用/关闭某 Directive 的操作,会自动同步到所有相关控制器上。
🔁 启用状态传播机制:
| 操作 | 影响 |
|---|---|
| Controller Level Reset | 除 Identify 外所有 Directives 都被该控制器清除 |
| NVM Subsystem Reset | 除 Identify 外所有 Directives 都被清除(针对受影响 Domain) |
| 设置相同的 HOSTID 给多个控制器 | 所有挂接在共享 namespace 的控制器同步启用状态 |
| 启用控制器并设置 HOSTID | 同样同步 Directive 状态到其他控制器 |
| 通过非重置方式启用 Directive | 所有关联控制器都同步该 Directive 状态 |
💡 总结知识点:
| 关键点 | 描述 |
|---|---|
| 支持性返回 | 通过 Directive Receive + Return Parameters 获取支持的指令 |
| 启用操作 | 通过 Directive Send + Enable Directive 启用指定 NSID 的指令 |
| 同步机制 | 对于共享 namespace,启用状态自动在相同 HOSTID 的控制器间同步 |
| 默认状态 | Identify Directive 总是被支持和启用;其他指令在重置后需重新启用 |
✅ 建议学习路径
- 先使用
Directive Receive + Return Parameters查看支持与启用状态; - 若某 Directive 被支持但未启用,使用
Directive Send + Enable Directive启用; - 使用相同 HOSTID 的多个控制器时,可自动同步指令启用状态;
- 操作时注意
NSID = FFFFFFFFh表示“全局生效”; - 每次重置后(除 Identify 指令),其他 Directives 需重新启用。
下一页进入 Streams Directive(流写优化) 的具体结构与用途说明(8.7.3),是否继续帮你逐条翻译讲解?这部分是 Directives 中唯一一个 适用于 I/O 命令的数据归类优化指令,在高性能 SSD 应用中非常关键。