错误处理 - 🔐 一、Registering(注册) (第426页)
NVME2.0协议解读 1 min read

错误处理 - 🔐 一、Registering(注册) (第426页)

Blog Author

我们继续深入学习 NVMe Express Base Specification 2.0b 第 8.19 节 Reservation(预留)机制的注册过程(Registering)与注销过程(Unregistering)。这部分内容非常关键,决定了多主机共享命名空间时,如何正确地初始化、维护和撤销预留状态。


🔐 一、Registering(注册)

在进行 Reservation 操作之前,主机必须先注册一个 Reservation Key(预留密钥),这将建立:

主机(Host)⇌ 命名空间(Namespace)

之间的合法绑定。

✅ 1. 注册流程(基础流程)

主机使用 Reservation Register 命令并设置字段如下:

字段 说明
RREGA 000b 表示执行的是 Register Reservation Key 操作
NRKEY 任意非零值 新的 Reservation Key
IEKEY 忽略 在此操作下无效

💡 一旦注册成功: - 该主机即成为该命名空间的 “Registrant”(注册者) - 可以通过任意带有同一 Host Identifier 的 Controller 访问该命名空间


⚠️ 2. 注册冲突行为

若主机 已经是注册者,再尝试注册一个 不同的 Reservation Key,控制器将:

❌ 终止命令,返回 Reservation Conflict


🧩 3. Reservation Key 可重复注册?

是的,在同一个 host(同一个 Host Identifier)上:

  • 多个 controller 上可以重复注册相同 Reservation Key;
  • 不同 host 之间也允许注册相同的 Reservation Key(只要 Host ID 不同)。

🔁 4. 替换 Reservation Key

主机可通过以下字段修改自己当前的 Reservation Key:

字段
RREGA 010b(Replace Reservation Key)
CRKEY 当前 Key
NRKEY 新 Key

如果 CRKEY 不匹配,命令将返回 Reservation Conflict


🚨 IEKEY 特殊用法

IEKEY(Ignore Existing Key) = 1 时: - 可以忽略当前注册状态 - 可以强制替换当前注册 Key 或直接注册新 Key - 有效地提升了注册/更新的灵活性


🧼 二、Unregistering(注销)

当主机不再需要参与命名空间的预留,可以使用 Reservation Register 命令注销:

字段 说明
RREGA 001b(Unregister Reservation Key)
CRKEY 当前注册的 Reservation Key
IEKEY 可选,如果为 1 则忽略 CRKEY 检查

❌ CRKEY 不匹配处理

  • 如果 CRKEY 和当前注册 Key 不匹配 → Reservation Conflict
  • 如果主机当前未注册任何 Key → Reservation Conflict

🧯 注销带来的影响

注销后:

  • 主机不再是该命名空间的 Registrant
  • 如果当前主机是 Reservation 的持有者(Holder),且是 唯一持有者,则 Reservation 自动释放
Reservation 类型 会自动释放吗?
Write Exclusive – All Registrants ✅ 是的
Exclusive Access – All Registrants ✅ 是的
其他单主机持有类型 ✅ 是的

✅ 总结小结

动作 命令参数设置 说明
注册 Reservation Key RREGA = 000b,IEKEY = 0 成为注册者,需提供唯一 Key
替换 Reservation Key RREGA = 010b,IEKEY = 0 替换当前 Key,需提供原 Key
忽略注册状态直接替换 RREGA = 010b,IEKEY = 1 强制更新 Key
注销 RREGA = 001b,IEKEY = 0 仅在 Key 匹配时生效
强制注销 RREGA = 001b,IEKEY = 1 无视当前 Key,强制注销

下一节内容将涉及:

🔄 Reservation Acquire(持有权获取)与 Release(释放)命令

你是否想继续逐节学习下去?或者我也可以为你制作一张 Reservation 状态机流程图来辅助理解~