错误处理与诊断 - 第424页
我们继续深入解析 NVMe 2.0b 规范第 8.19 节 Reservation(预留)机制 的后续内容,这一部分主要包括:
- 控制器与命名空间的支持要求
- Reservation 类型及其行为逻辑
- Persist Through Power Loss(掉电保持)机制
✅ 一、控制器与命名空间的支持能力要求(8.19 继续)
🔧 控制器支持要求
如果控制器支持 Reservation 功能,它必须额外支持以下两个 Feature:
| Feature | 描述 |
|---|---|
| Host Identifier Feature | 用于标识多个控制器是否属于同一个主机(关联性) |
| Reservation Persistence Feature | 控制预留是否在掉电后仍然保持(PTPL) |
📦 命名空间支持要求
若某个命名空间支持 Reservation,它必须:
- 在
Identify Namespace数据结构中的RESCAP字段报告非零(代表支持类型) - 支持掉电保持(Persist Through Power Loss,PTPL)状态机制
- 确保 不会因为资源不足而导致 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 Register、Acquire、Release、Report四大命令的字段结构和交互流程 - 或者关于 PTPL 的实现方式、安全注意事项
- 甚至你想我画出 Reservation 状态流转的状态图
都可以告诉我,我可以继续中文引导学习。你接下来想继续深入哪个部分?