管理命令集与操作 - 第156页
我们继续深入解析 《NVM Express® Base Specification, revision 2.0b》第 145 页 的内容,重点是:
📘 图 138(续)—— Admin 命令扩展与说明补充
✅ Opcode 分配区间补充:
| Opcode 范围 | 含义 |
|---|---|
C0h 到 FFh |
Vendor Specific,厂商自定义命令范围 |
| 未列出的值 | 保留(Reserved),未来规范可能定义 |
🧾 图 138 注释解读(Notes)
这些注释为开发者使用 NSID、Opcode、数据传输方向提供了关键限制说明:
🔹 Note 1
- 表中未列出的 Opcode 属于保留值(Reserved),不要使用。
🔹 Note 2
- Namespace Identifier (NSID) 只在某些命令中使用;
- 若使用此字段,通常支持设置为
FFFFFFFFh(广播命名空间 ID),除非命令明示不支持; - 如果命令不使用 NSID,则该字段必须设为
0h(详见图 87)。
🔹 Note 3
- 数据传输方向说明如下(用于标记命令的 I/O 类型):
00b:无数据传输01b:Host → Controller10b:Controller → Host11b:双向(Bidirectional)
🔹 Note 4
- 某些命令(如
Namespace Attachment)不支持NSID=FFFFFFFFh。
🔹 Note 5
Directive Send/Receive是否支持NSID=FFFFFFFFh取决于 Directive Operation 类型(见第 8.7 节)。
🔹 Note 6
Identify命令是否使用 NSID 取决于 CNS 值(参见图 273)。
🔹 Note 7
Security Send/Receive命令的 NSID 用法取决于具体的 安全协议(如 TCG)。
🔹 Note 8
- 命令是否依赖某个 I/O Command Set:
- No:与任何 I/O Command Set 无关;
- NVM:仅适用于 NVM Command Set;
- ZNS:适用于 Zoned Namespace Command Set;
- A:所有 I/O Command Set 通用。
🔹 Note 9
- 所有 NVMe over Fabrics 命令都使用 Opcode 7Fh,具体定义见第 6 章。
⚠️ 图 139:格式化/擦除操作中的 Admin 命令限制
NVMe 对于正在执行 Format NVM 或 Sanitize 操作的命令兼容性做了详细规定。
🧩 图 139 的作用:
| 情况 | 说明 |
|---|---|
| 当某个命名空间正在执行 Format NVM 命令 | 控制器会拒绝执行某些 Admin 命令,返回 Format in Progress 状态码 |
| 若有未列出的 Admin 命令正在被处理 | 会导致随后发起的 Format NVM 被拒绝,返回 Command Sequence Error |
📘 图 139(部分)允许的 Admin 命令
| 命令名称 | 对 Format NVM 的限制 | 对 Sanitize 的限制 |
|---|---|---|
| Abort | ✅ 允许 | ✅ 允许 |
| Asynchronous Event Request | ✅ 允许 | ✅ 允许 |
| Create I/O Completion Queue | ✅ 允许 | ✅ 允许 |
| Create I/O Submission Queue | ✅ 允许 | ✅ 允许 |
| Device Self-Test | 只允许 Controller DST | ❌ 禁止 |
| Delete I/O Completion Queue | ✅ 允许 | ✅ 允许 |
| Delete I/O Submission Queue | ✅ 允许 | ✅ 允许 |
| Get Features | ✅ 允许 | ✅ 允许 |
❗ 说明: - Controller DST(Device Self-Test) 是指仅允许对整个控制器执行自检,不允许对命名空间执行; - Sanitize(清除)操作下,禁止某些可能影响数据完整性的命令(例如测试命令)。
🧠 小结:命令处理机制的工程意义
| 项目 | 工程意义 |
|---|---|
| 控制器正在执行 Format 或 Sanitize 时限制其他命令 | 保证数据一致性与可靠性 |
| 格式化期间允许哪些命令 | 保障必要的管理、监控操作(如 AER、Abort)仍可执行 |
| 不兼容命令强制返回特定错误码 | 便于主机软件快速判定问题来源并采取容错策略 |
✅ 建议学习步骤
- 整理所有 Admin Opcode 对应的功能与 NSID 支持情况;
- 专门研究图 139,理解“命令执行与互斥行为”的管理机制;
- 编写一个 Admin 命令兼容矩阵表格,用于后续开发时判断命令冲突;
- 想深入理解任一命令(如 Format NVM 或 Sanitize),我可为你按位解析其结构、执行过程和状态码。
需要我继续讲解 Format NVM、Sanitize 或 Identify 命令的具体用法与结构吗?还是我们继续看下一页?