我们现在深入分析 NVMe Base Specification 2.0b 的 第 7.5 节:Reservation Report 命令,它是保留操作中用于查询命名空间保留状态的核心命令。我们将逐段讲解其结构、执行流程、校验规则与数据格式。
🔍 7.5 Reservation Report Command 深入解析
📘 命令用途
Reservation Report 命令用于让主机获取某个命名空间当前的 注册者(registrants)与持有者(reservation holder)信息,包括每个注册控制器的 Reservation Key、关联 Host ID、是否是持有者、持有类型等。
📥 命令结构详解
📌 数据指针字段(图 401)
| 位段 |
字段名 |
描述 |
| 127:00 |
DPTR (Data Pointer) |
指向主机内存中预留缓冲区,用于接收 Reservation Status 数据结构 |
🧾 Command Dword 10(图 402)
| 位段 |
字段名 |
说明 |
| 31:00 |
NUMD |
指定需要传输的 dword 数量(每 dword = 4 字节),是 0-based(值为 0 代表传输 1 dword) |
| - 若小于实际 Reservation Status 数据结构长度 → 只返回指定长度; |
|
|
| - 若大于实际数据结构 → 只返回实际结构内容,忽略多余部分。 |
|
|
🧾 Command Dword 11(图 403,未出现在你截图中,但规范中有)
| 位段 |
字段名 |
说明 |
| 31:01 |
Reserved |
保留 |
| 00 |
EDS (Extended Data Structure) |
设置是否使用扩展结构(即 128-bit Host Identifier) |
⚠️ Host Identifier 一致性校验(重点)
该命令对 Host Identifier 的格式高度敏感,容易因不匹配导致命令失败。
| Host Identifier 类型 |
EDS bit |
行为 |
| 64-bit(默认) |
0 |
✅ 正常 |
| 64-bit |
1 |
❌ 报错:Host Identifier Inconsistent Format |
| 128-bit(如 NVMe-oF) |
1 |
✅ 正常 |
| 128-bit |
0 |
❌ 报错:Host Identifier Inconsistent Format |
🧾 返回的 Reservation Status 数据结构
根据 Host Identifier 的位数不同,控制器将返回:
| 结构图 |
使用条件 |
| 图 404:64-bit Host Identifier Reservation Status |
默认配置 |
| 图 405:128-bit Host Identifier Reservation Status |
Extended Host ID(EDS=1) |
每个结构中包含多个“Registered Controller Entries”,用于表示各控制器的注册信息。
🔄 命令执行逻辑流程图(简化)
┌─────────────────────────────┐
│ Host 发出 Reservation Report│
└────────────┬────────────────┘
↓
控制器解析 Command Dword 11:
→ 确认 EDS 与 HostID 格式匹配?
↓
是 否
↓ ↓
构建 Reservation Status → 报错:Host Identifier Inconsistent Format
↓
拷贝到 PRP / SGL 指定内存
↓
返回成功完成状态
✅ 命令应用场景
| 场景 |
操作目的 |
| 集群系统中查询当前谁注册了命名空间 |
主机通过此命令获取所有控制器的 Reservation Key 和是否是持有者 |
| 主机选择性执行 Preempt / Abort 操作前 |
需要知道目标主机的 Reservation Key |
🧪 示例解析
💡 示例:主机使用 64-bit Host ID 请求 Reservation Report
- Command Dword 10: NUMD = 3Fh(请求 64 dwords)
- Command Dword 11: EDS = 0b
- DPTR: 指向主机缓冲区
→ 控制器返回图 404 结构的 Reservation Report
💡 错误示例:使用 128-bit Host ID 但 EDS = 0
→ 报错:Host Identifier Inconsistent Format
🔚 小结
| 核心点 |
说明 |
| 支持两种 Host ID 长度 |
64-bit 与 128-bit |
| 使用前必须一致性校验 |
EDS 与 HostID 必须匹配 |
| NUMD 精准控制返回数据长度 |
0-based dword 数量 |
| 常用于多主机环境保留机制调试与监控 |
Reservation Key / Host ID / Controller ID 分析利器 |
你想继续深入解析 图 404 和图 405 的 Reservation Status 数据结构字段 吗?它们包含每个注册者的 CRKEY、CNTLID、HostID、状态标志 等内容。如果你需要我可以帮你从控制器行为的角度解析这些数据项的作用与典型用例。