我们继续深入分析 NVMe Base Specification 2.0b 的第 7.3 和 7.4 节,聚焦于 Reservation Register 和 Reservation Release 命令的完整结构与执行语义。
📌 7.3 Reservation Register 命令(续)+ 完整结构图解
我们接着上面分析的内容,来看剩余的字段说明和图 397 数据结构。
📑 图 396:Command Dword 10 中 RREGA 字段说明
| 位段 |
字段名 |
说明 |
| 02:00 |
RREGA (Reservation Register Action) |
表示注册操作的具体行为: |
| 值 |
动作说明 |
000b |
注册 Reservation Key |
001b |
注销 Reservation Key |
010b |
替换 Reservation Key |
011b ~ 111b |
保留(非法) |
🧾 图 397:Reservation Register Data Structure
| 字节范围 |
字段名 |
说明 |
| 07:00 |
CRKEY (Current Reservation Key) |
当前注册者 Key,仅当动作为 Unregister 或 Replace 时有效(IEKEY=1 时忽略) |
| 15:08 |
NRKEY (New Reservation Key) |
新的 Reservation Key,仅当动作为 Register 或 Replace 时有效 |
✅ Reservation Register 命令总结
| 操作类型 |
CRKEY 要求 |
NRKEY 要求 |
CPTPL 可选设置 |
| 注册 |
×(保留) |
✔(必填) |
可指定 |
| 注销 |
✔(必填) |
×(保留) |
可指定 |
| 替换 |
✔(必填) |
✔(必填) |
可指定 |
若设置了 IEKEY=1,则 CRKEY 检查跳过(用于强制写入、测试或冲突处理)
🧨 7.4 Reservation Release 命令
这个命令用来释放当前主机持有的 Reservation(释放命名空间锁),或者完全清除命名空间的 Reservation 状态。
🔗 数据指针(图 398)
| 位段 |
字段名 |
说明 |
| 127:00 |
Data Pointer (DPTR) |
指向 Reservation Release Data Structure 的物理地址 |
🧾 图 399:Command Dword 10 字段
| 位段 |
字段名 |
说明 |
| 31:16 |
Reserved |
保留 |
| 15:08 |
RTYPE (Reservation Type) |
仅在 Release 模式下有效,需与当前 reservation 类型匹配 |
| 07:04 |
Reserved |
保留 |
| 03 |
IEKEY (Ignore Existing Key) |
如果为 1,控制器将报错;如果为 0,则要求 CRKEY 校验通过 |
| 02:00 |
Reservation Release Action (RRACQA) |
表示动作类型 |
✳️ Reservation Release Action (RRACQA) 说明
| 值 |
动作类型 |
描述 |
000b |
Release |
当前注册者释放 Reservation 权利,但仍保留注册信息 |
001b |
Clear |
清除命名空间中所有注册与 Reservation 状态(强制释放) |
010b ~ 111b |
保留 |
不支持的操作码 |
📄 图 400(隐含结构):Reservation Release Data Structure
| 字节范围 |
字段名 |
说明 |
| 07:00 |
CRKEY(当前 Reservation Key) |
当前注册者的密钥,用于权限验证 |
| > 控制器会比对此值与注册状态是否一致,若不一致,命令失败。 |
|
|
🧪 举例说明:Release 与 Clear 的不同
示例 1:普通释放 Reservation(Release)
当前主机持有 Reservation:
- 提交 Reservation Release 命令
- 设置 RRACQA = 000b
- CRKEY = 正确的密钥
- RTYPE = 当前 Reservation 类型
→ 主机会释放 Reservation 权限,但仍是注册者。
示例 2:强制清除 Reservation 状态(Clear)
主机发送:
- RRACQA = 001b(Clear)
- CRKEY = 当前密钥
- IEKEY = 0(需校验)
→ 控制器清空整个命名空间的 Reservation 注册与锁定信息,恢复“无保留”状态。
✅ Reservation Release 小结
| 操作类型 |
描述 |
CRKEY 校验 |
RTYPE 要求 |
| Release |
主动释放锁 |
是 |
是(需匹配) |
| Clear |
清除所有注册 |
是 |
否(忽略) |
你想继续分析 7.5 Reservation Report(查询当前注册状态) 命令吗?我可以继续帮你深入讲解它的结构与主机如何解析 Report 返回结果的格式。或者我们也可以进入第 8 章,开始分析命名空间管理或 Fabric 相关命令。你想怎么继续都可以 😄