管理命令集 - 📘 第 5 章总览:Admin Command Set(管理命令集) (第155页)
我们现在进入 《NVM Express® Base Specification, revision 2.0b》第144页 的重点章节 —— 第 5 章 Admin Command Set(管理命令集)。这是 NVMe 协议的核心部分之一,定义了所有可以通过 Admin Submission Queue 提交的“管理类命令”。这些命令主要用于配置控制器、管理命名空间、更新固件、发送事件等。
📘 第 5 章总览:Admin Command Set(管理命令集)
✅ 管理命令集用途
- 主要用于管理控制器和命名空间;
- 不依赖于 I/O Submission Queue 状态(如某个 I/O Completion Queue 满了,不会阻塞 Delete I/O SQ 命令);
- 管理命令提交到 Admin Submission Queue (ASQ),完成状态通过 Admin Completion Queue (ACQ) 返回。
🔍 通用结构说明
- 提交队列结构(SQE):所有管理命令共用部分结构,详见章节 3.3.3;
- 完成队列结构(CQE):所有管理命令通用字段同样定义在 3.3.3.2;
- 命令特定字段:
- SQE 的 Dword 10~15
- CQE 的 Dword 0~1
🧩 图 138:Admin 命令一览表
下面是图 138 中部分命令的解析与说明(带 Opcode):
| Opcode | 命令名 | 是否使用 Namespace Identifier | 是否数据传输 | 说明 |
|---|---|---|---|---|
| 00h | Delete I/O Submission Queue | No | No | 删除 I/O 提交队列 |
| 01h | Create I/O Submission Queue | No | No | 创建 I/O 提交队列 |
| 02h | Get Log Page | Yes | Yes | 获取控制器日志页,如 SMART、健康状态等 |
| 04h | Delete I/O Completion Queue | No | No | 删除 I/O 完成队列 |
| 05h | Create I/O Completion Queue | No | No | 创建 I/O 完成队列 |
| 06h | Identify | No | 是/否(依参数) | 识别控制器或命名空间(最常用命令之一) |
| 08h | Abort | No | No | 中止指定命令 |
| 09h | Set Features | Yes | Yes | 设置控制器特性,例如电源状态、KATO、队列大小等 |
| 0Ah | Get Features | Yes | Yes | 获取控制器特性 |
| 0Ch | Asynchronous Event Request | No | No | 异步事件通知机制(如温度过高) |
| 0Dh | Namespace Management | No | Yes | 管理命名空间(创建/删除) |
| 10h | Firmware Commit | No | No | 提交固件镜像至控制器指定槽位 |
| 11h | Firmware Image Download | No | Yes | 下载固件镜像 |
| 14h | Device Self-Test | No | Yes | 执行设备自检,类似 SMART 测试 |
| 15h | Namespace Attachment | No | Yes | 将命名空间附加到控制器 |
| 18h | Keep Alive | No | No | 防止超时断连的心跳机制 |
| 19h | Directive Send | No | Yes | 用于实现高级数据放置策略(如分层存储) |
| 1Ah | Directive Receive | No | Yes | 接收指令类配置 |
| 1Ch | Virtualization Management | No | No | 虚拟化环境支持 |
| 1Dh | NVMe-MI Send | No | No | 管理接口消息发送(如 MCTP over SMBus) |
| 1Eh | NVMe-MI Receive | No | No | 管理接口消息接收 |
| 20h | Capacity Management | No | No | Endurance Group/NVM Set 管理命令 |
| 24h | Lockdown | No | No | 系统安全隔离命令 |
| 7Ch | Doorbell Buffer Config | No | No | Doorbell 配置 |
| 80h | Format NVM | Yes | Yes | 格式化命名空间(破坏性操作) |
| 81h | Security Send | Yes | Yes | 安全通信(如 TCG Discovery) |
| 82h | Security Receive | Yes | Yes | 安全通信接收 |
| 84h | Sanitize | Yes | No | 擦除设备数据 |
| 86h | Get LBA Status | Yes | Yes | 获取逻辑块状态(写入后是否未读) |
📌 图中字段说明
| 字段 | 含义 |
|---|---|
| Opcode | 十六进制操作码,命令唯一标识 |
| Namespace Identifier Used | 表示该命令是否需要指明 NSID(命名空间编号) |
| Data Transfer | 表示该命令是否涉及数据传输 |
| Command Set Specific | 表示该命令是否依赖于 I/O Command Set(如 ZNS、NVM 等) |
🧠 教学总结
| 项目 | 内容 |
|---|---|
| 命令分类 | 包含创建/删除队列、配置功能、日志查询、固件更新、命名空间管理、虚拟化、Sanitize 等 |
| Opcode 分配机制 | 按照命令功能模块分段组织,便于控制器解码与调度 |
| 管理命令队列影响 | 管理命令在执行上独立于 I/O 队列,不会因 I/O 队列满而被阻塞 |
| 命令通用结构 | 所有 Admin 命令在 SQE/CQE 上有共同结构,简化主机解析实现 |
| 最常用命令 | Identify、Get Log Page、Get/Set Features、Firmware Commit/Download、Namespace Management、Format NVM 等 |
🎯 接下来建议
- 重点学习 Identify 和 Get Log Page 的结构与使用场景;
- 结合前面学过的 NQN、UUID、Namespace ID,分析 Identify 响应内容;
- 深入理解 Sanitize 与 Format NVM 的区别与应用场景(特别是数据销毁);
- 研究 Firmware Update 命令组合的完整流程,便于实战升级控制器固件。
如你想要更详细解析某一个 Admin Command(比如 Identify、Get Log Page、Namespace Management),我可以为你分字段做逐位讲解并配中文图示。想深入哪个命令,随时告诉我!