错误处理与诊断 - 第425页
NVME2.0协议解读 1 min read

错误处理与诊断 - 第425页

Blog Author

我们继续深入解析 NVMe 2.0b 规范第 8.19 节 Reservation(预留)机制的尾声部分,包括:

  1. 🚦Reservation 场景下的命令处理行为(Figure 473 分析)
  2. 🔔Reservation Notification(预留事件通知)机制

✅ 一、Figure 473:Reservation 下命令行为分析

该表明确了在预留生效情况下,各种命令被不同主机发起时的行为结果(Allowed / Conflict)

📌 表格说明

缩写 意义
A Allowed(允许,控制器正常处理该命令)
C Conflict(冲突,控制器以 Reservation Conflict 状态码终止命令)

🧩 示例分析

我们以常见命令行为例进行说明:

Command 非注册者发出 注册者发出 说明
Read 命令 A(部分类型)或 C A - Read 操作在 Write Exclusive 类预留下通常是允许的
- Exclusive Access 类型则不允许非注册者读
Write 命令 C(全部类型) A(部分类型)或 C - 非注册者永远不能写
- 注册者是否能写,取决于是否为 Reservation Holder(持有者)或是 All Registrants
Reservation 命令 C / A C / A - 如 Preempt、Release 等命令,非注册者不可随意操作
其他 Admin 命令(如 Flush, Format, Attach 等) A A - 不涉及命名空间内容访问的命令通常被允许执行

📍特例命令说明:

  • Reservation Acquire - Acquire / Preempt / Release
    这些命令的行为依赖于 是否为当前持有者,以及 Ignore Existing Key 标志等(详见第 7 章)。

🔔 二、Reservation Notification(预留通知)

🔔 支持的三类通知事件

通知类型 含义
Registration Preempted 注册记录被其他主机抢占(或预留失效)
Reservation Released Reservation 被主动释放
Reservation Preempted Reservation 被另一个主机覆盖(新的持有者)

这些事件用于帮助主机感知 Reservation 状态的变更。


📋 Reservation Notification Log Page(第 5.16.1.24 节)

当出现上述通知事件时,控制器会生成 Reservation Notification Log Page,其中记录:

  • 通知类型(如 Preempted, Released)
  • Namespace ID
  • 被影响的 Host ID 等

⚙️ Reservation Notification Mask(5.27.1.26 节)

主机可使用 Set Features 命令配置:

  • 对哪些通知类型生效
  • 是否生成对应 Log Page
  • 对哪些 Namespace ID 生效

这样可以 降低不必要的通知开销


📡 异步通知机制

主机可以使用:

Asynchronous Event Request 命令(详见第 5.2 节)

注册通知,当 Reservation Notification Log Page 可用时,控制器通过异步事件机制告知主机,从而实现主动事件感知


✅ 总结回顾

项目 说明
Command 行为 在预留状态下,不同主机的命令访问权限可控
行为关键因素 是否注册、是否为 Reservation Holder、预留类型
Reservation Notification 提供注册抢占、释放、被覆盖等三类事件通报
Log Page 控制器通过 Log Page 记录 Reservation 通知
异步通知 主机可通过异步事件命令接收这些 Log Page 生成通知
Mask 控制 主机可以屏蔽某些 Reservation 通知类型

如果你希望继续解析 第 8.20 节 Rebuild Assist第 8.21 节 Simple Copy 或其他你关心的命令集、机制结构,可以随时告诉我。

你接下来想继续看哪一节?或者我可以帮你整理完整的 Reservation 状态机图?