高级特性与优化 - 第344页
我们继续深入学习 NVMe Base Specification 2.0b 的第 7.3 节 —— Reservation Register(保留注册)命令。
🔐 7.3 Reservation Register 命令 —— 中文深入解析
🧭 功能概述
Reservation Register 命令 用于:
- ✅ 向命名空间注册 Reservation Key(标识当前主机的注册者身份)
- ❌ 注销当前的 Reservation Key
- 🔁 替换已有的 Reservation Key(更新操作)
- ✳️ 同时修改 “断电持久性状态”(PTPL)
此命令的设计核心是为了实现多主机环境中的“注册身份确认”机制,为后续的 Reservation Acquire、Release、Report 提供注册基础。
🧩 命令字段详解
🔗 数据指针(图 395)
| 位段 | 字段名 | 说明 |
|---|---|---|
| 127:00 | Data Pointer (DPTR) | 指向 Reservation Register Data Structure 的物理地址,使用 PRP 或 SGL 提交 |
🧾 Command Dword 10 字段(图 396)
| 位段 | 字段名 | 说明 |
|---|---|---|
| 31:30 | CPTPL (Change PTPL) | 是否修改 Reservation 的“断电持久性 Persist Through Power Loss”状态 |
| 29:04 | Reserved | 保留 |
| 03 | IEKEY (Ignore Existing Key) | 如果为1,则跳过当前 Reservation Key 检查,直接进行操作 |
✅ CPTPL 取值定义(Change Persist Through Power Loss)
| CPTPL值 | 说明 |
|---|---|
00b |
不修改 PTPL 状态(默认) |
10b |
设置为 0,表示掉电后 Reservation 不保留(清除) |
11b |
设置为 1,表示掉电后 Reservation 保留 |
01b |
保留(不能使用) |
🔁 如果
Reservation Persistence Feature可保存(saveable),该设置会同时影响当前值和保存值。
⚙️ IEKEY(Ignore Existing Key)
该位决定是否忽略命令中提供的 CRKEY(当前密钥):
- 如果
IEKEY=1,则无视 CRKEY 字段中的值,直接执行注册/替换操作; - 如果
IEKEY=0,则控制器会检查命令提交的 CRKEY 是否与当前注册状态匹配,确保合法性。
🔢 图 394:Reservation Type 编码(补全说明)
| 值 | 类型(Reservation Type)说明 |
|---|---|
| 00h | Reserved(保留) |
| 01h | Write Exclusive:仅拥有者能写,任何人都可读 |
| 02h | Exclusive Access:仅拥有者可读写 |
| 03h | Write Exclusive - Registrants Only:仅注册者间写互斥 |
| 04h | Exclusive Access - Registrants Only:仅注册者间读写互斥 |
| 05h | Write Exclusive - All Registrants:所有注册者可读,只有一个注册者可写 |
| 06h | Exclusive Access - All Registrants:所有注册者中仅一方可读写 |
| 07h~FFh | 保留 |
🧪 举例说明:注册流程演示
场景 1:注册为一个新的注册者
目标:当前主机第一次注册
操作:提交 Reservation Register 命令
设置:
- CRKEY = 0
- NRKEY = 0x1122334455667788(希望注册的密钥)
- IEKEY = 1
- CPTPL = 00b(不更改掉电持久状态)
控制器在无视旧 CRKEY 的情况下接受注册,登记 NRKEY,主机完成注册。
场景 2:更新 Reservation Key
目标:主机希望替换旧 Reservation Key
操作:
- CRKEY = 当前已注册的 key(如 0x1122334455667788)
- NRKEY = 新的 key(如 0xAABBCCDDEEFF0011)
- IEKEY = 0(要求检查现有密钥匹配)
控制器校验当前注册状态,如果 CRKEY 与现有一致,则更新成功。
场景 3:清除注册信息并设置 PTPL = 0
目标:主机注销自身注册信息并指定断电不保留 Reservation 状态
设置:
- CRKEY = 当前 key
- NRKEY = 0
- IEKEY = 0
- CPTPL = 10b(设置 PTPL = 0)
✅ 总结小结
| 要素 | 内容 |
|---|---|
| 📌 核心功能 | 注册、注销、替换 Reservation Key;设置断电持久性 |
| 🔑 关键字段 | CRKEY, NRKEY, IEKEY, CPTPL |
| 🧩 关联命令 | Reservation Acquire、Release、Report |
| 💡 注意 | 使用 IEKEY=1 时会跳过 CRKEY 校验,但需谨慎使用 |
你是否希望我继续带你看 图 397 Reservation Register Data Structure 的字段定义?或者转向下一节 7.4 Reservation Release 命令 的学习?我们可以继续图文并解,逐段掌握。