高级特性 - 🔐 7.2 Reservation Acquire 命令 —— 中文深入解析 (第343页)
NVME2.0协议解读 1 min read

高级特性 - 🔐 7.2 Reservation Acquire 命令 —— 中文深入解析 (第343页)

Blog Author

我们继续深入分析 NVMe Base Specification 2.0b 第7章的内容,这一节主要聚焦在 7.2 Reservation Acquire 命令。这个命令是 NVMe 中用于协调多主机访问某个命名空间的重要机制,广泛应用于共享存储、多主控制器环境(如 HA 方案、虚拟化、分布式存储)中。


🔐 7.2 Reservation Acquire 命令 —— 中文深入解析

📌 作用概览

Reservation Acquire(保留获取)命令 主要用于: 1. 获取(Acquire)命名空间的保留权(Reservation)。 2. 争抢(Preempt)当前的保留权(如主动踢掉别人)。 3. 中止(Abort)现有保留权。

这类机制有助于协调多主机共享存储资源时的互斥与优先级控制。


🧩 命令格式组成

✅ 数据缓冲区位置(Data Pointer)

字段:127:00 - Data Pointer (DPTR)
说明:数据缓冲区的位置,可由 PRP 或 SGL 指定。用于传输 Reservation Acquire Data Structure。

✅ Command Dword 10 结构(图 392)

Bits 字段 含义
31:16 Reserved 保留
15:08 RTYPE (Reservation Type) 要获取的保留类型,定义见图 394
07:04 Reserved 保留
03 IEKEY (Ignore Existing Key) 如果为 1,则应直接报错;设置为 0 时需校验当前密钥(CRKEY)
02:00 RACQA (Reservation Acquire Action) 要执行的操作:获取、抢占或中止

RACQA 具体定义如下:

值 (RACQA) 操作 说明
000b Acquire 获取保留权
001b Preempt 抢占并删除 PRKEY 对应的注册者
010b Preempt and Abort 抢占并强制中止当前命令
011b-111b Reserved 保留值,不能使用

📦 Reservation Acquire Data Structure(图 393)

Byte范围 字段名称 含义
07:00 CRKEY (Current Reservation Key) 表示当前主机使用的 Reservation Key
15:08 PRKEY (Preempt Reservation Key) 用于 Preempt 操作时指定目标 key

🚨 注意: - 若是普通 Acquire 操作,只需设置 CRKEY - 若为 Preempt 或 Preempt and Abort,则需同时提供 PRKEY 以说明踢掉谁


🧠 使用流程示例详解

🎯 场景 1:主机尝试获取保留权

- 设置 RACQA = 000b (Acquire)
- 设置 RTYPE = 02h (Write Exclusive, 举例)
- 设置 CRKEY = 0xABCD1234
- IEKEY = 0(表示检查当前 Reservation Key)

控制器校验当前是否已有 reservation,如果没有或 key 匹配,则赋予保留权。


⚔️ 场景 2:主机尝试踢掉已有保留者(Preempt)

- 设置 RACQA = 001b (Preempt)
- 设置 PRKEY = 0x12345678(目标保留者 key)
- 设置 CRKEY = 0x87654321(自己要获取的 key)

控制器会删除 PRKEY 注册者的注册项,同时赋予当前主机保留权。


⛔ 场景 3:设置错误 IEKEY

如果主机将 IEKEY 设置为 1,则规范要求控制器必须直接返回 Invalid Field In Command 错误。这是为了避免误操作不检查保留密钥就篡改保留权。


🔐 Reservation 类型(图 394,后续定义)

在图 394 中将会列出 保留类型 Reservation Type (RTYPE),如: - Write Exclusive - Exclusive Access - Write Exclusive – Registrants Only - Exclusive Access – Registrants Only - Write Exclusive – All Registrants - Exclusive Access – All Registrants

不同类型的保留策略对读/写/注册者行为定义了清晰的互斥控制策略。我们稍后可继续深入学习这些类型含义。


✅ 小结:Reservation Acquire 总结回顾

要素 说明
🎯 用途 获取、抢占、或中止命名空间的 Reservation 权
💡 核心字段 CRKEY(当前密钥)、PRKEY(抢占目标)、RTYPE(类型)、RACQA(动作)
🚫 限制 IEKEY 不能为 1,否则命令报错
📌 典型应用 虚拟化、高可用集群、分布式锁机制等场景

是否继续分析图 394 中的 Reservation Type 详细定义?或者继续往下看 Reservation Register(7.3)命令的注册流程和机制?我可以按你的节奏逐段逐图带你掌握。