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

错误处理与诊断 - 第424页

Blog Author

我们继续深入解析 NVMe 2.0b 规范第 8.19 节 Reservation(预留)机制 的后续内容,这一部分主要包括:

  • 控制器与命名空间的支持要求
  • Reservation 类型及其行为逻辑
  • Persist Through Power Loss(掉电保持)机制

✅ 一、控制器与命名空间的支持能力要求(8.19 继续)

🔧 控制器支持要求

如果控制器支持 Reservation 功能,它必须额外支持以下两个 Feature:

Feature 描述
Host Identifier Feature 用于标识多个控制器是否属于同一个主机(关联性)
Reservation Persistence Feature 控制预留是否在掉电后仍然保持(PTPL)

📦 命名空间支持要求

若某个命名空间支持 Reservation,它必须:

  1. Identify Namespace 数据结构中的 RESCAP 字段报告非零(代表支持类型)
  2. 支持掉电保持(Persist Through Power Loss,PTPL)状态机制
  3. 确保 不会因为资源不足而导致 Reservation Register 命令失败

🧠 二、注意事项:Ignore Existing Key 行为更改

规范特别指出:

“Ignore Existing Key” 的行为已作更改,以提升与 SCSI PR 的兼容性。

  • 判断设备是否实现新行为:查看命名空间的 RESCAP 字段是否设置对应标志位
  • 如果需要旧行为,参考 NVMe 1.2.1 规范定义

这说明:即使是相同命令,不同规范版本中行为可能不同,实现与验证时需要额外关注。


🔐 三、Reservation 类型总览(六种)

NVMe Reservation 总共支持六种类型,如下表所示:

类型编号 类型名称 描述 Reservation Holder 定义
1 Write Exclusive 所有主机可读,仅保留者可写 单一主机持有
2 Exclusive Access 只有保留者可读写 单一主机持有
3 Write Exclusive - Registrants Only 所有注册者可读,只有保留者可写 单一主机持有
4 Exclusive Access - Registrants Only 只有注册者中持有者可读写 单一主机持有
5 Write Exclusive - All Registrants 所有注册者都可读写 所有注册者均为保留者
6 Exclusive Access - All Registrants 所有注册者可读写,非注册者不可访问 所有注册者均为保留者

📊 四、行为差异比较表(Figure 472 分析)

下表展示不同类型 Reservation 对三类主机的访问权限:

Reservation 类型 Reservation Holder Registrant(注册但非持有) Non-Registrant(未注册)
Read / Write Read / Write Read / Write
Write Exclusive ✅ / ✅ ✅ / ❌ ✅ / ❌
Exclusive Access ✅ / ✅ ❌ / ❌ ❌ / ❌
Write Exclusive - RO ✅ / ✅ ✅ / ✅ ✅ / ❌
Exclusive Access - RO ✅ / ✅ ✅ / ✅ ❌ / ❌
Write Exclusive - AR ✅ / ✅ ✅ / ✅ ✅ / ❌
Exclusive Access - AR ✅ / ✅ ✅ / ✅ ❌ / ❌
  • ✅:允许访问
  • ❌:拒绝访问

RO = Registrants Only;AR = All Registrants

设计理念总结: - Exclusive Access 系列控制更严格:非持有者不能读写 - Write Exclusive 更宽松:读操作更开放 - All Registrants 系列:注册即共享访问权


🧲 五、PTPL:掉电保持机制

在多主机存储环境中,掉电保持(Persist Through Power Loss, PTPL)至关重要。

🔐 PTPLS(Persist Through Power Loss State)机制

每个支持 Reservation 的命名空间维护一个 PTPLS 标志状态:

  • 可通过:
  • Reservation Register 命令(第 7.3 节)
  • Set Features 命令(Feature Identifier = Reservation Persistence) 修改该状态
  • 如果设置了 PTPL,即使系统掉电,Reservation 注册信息也能保留

📌 实际场景中,掉电保持状态通常需要 NVM Controller 支持非易失性寄存器或 Flash-backed RAM。


✍️ 总结回顾

项目 说明
Reservation 类型 6 种,分别控制读写权限与注册者访问
控制器要求 必须支持命令集 + Host ID + 掉电保持能力
命名空间要求 报告 RESCAP ≠ 0,支持 PTPL,资源充足
PTPLS 控制掉电后 Reservation 是否保留
Ignore Existing Key 行为发生变更,需依据 RESCAP 判断实现兼容性

如果你想继续了解:

  • 具体的 Reservation RegisterAcquireReleaseReport 四大命令的字段结构和交互流程
  • 或者关于 PTPL 的实现方式、安全注意事项
  • 甚至你想我画出 Reservation 状态流转的状态图

都可以告诉我,我可以继续中文引导学习。你接下来想继续深入哪个部分?