高级特性与优化 - 第344页
NVME2.0协议解读 1 min read

高级特性与优化 - 第344页

Blog Author

我们继续深入学习 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 命令 的学习?我们可以继续图文并解,逐段掌握。