高级特性与优化 - 第328页
我们来继续深入讲解 NVMe Base Specification 2.0b 第 5.27.1.27 ~ 5.27.1.28 节中关于两项 Feature 的中文解析与学习引导,这两项功能在 Namespace 层面具有关键信息配置作用:
✅ Feature Identifier 83h: Reservation Persistence(预留信息掉电持久性)
📌 作用简介:
用于配置一个 Namespace 的注册表项(registrants)与 Reservation(预留)信息是否在掉电(power loss)后继续保留(PTPL)。
🧠 核心字段(见 Figure 368):
| Bit | 字段 | 说明 |
|---|---|---|
| 00 | PTPL | 设置为 1 表示 断电后持久化;设置为 0 表示 断电清除预留/注册信息 |
| 31:01 | Reserved | 保留位 |
🔁 命令行为:
| 操作类型 | Namespace ID | 行为 |
|---|---|---|
| Set Features | FFFFFFFFh |
应用于 所有支持 Reservation 的 Namespace |
| Set Features | 特定 NSID |
应用于指定命名空间 |
| Get Features | FFFFFFFFh |
应中止命令,返回 Invalid Field in Command |
| Get Features | 特定 NSID |
返回该命名空间的 PTPL 状态 |
⚠️ 特别说明:
- Feature Identifier 83h 通常是不可保存的(Not Saveable)
- 如果实现为 Saveable,Host 应确保保存值与当前值一致。
- 设置为 PTPL = 1 可以用于实现“掉电后仍保留多主机注册信息”的场景,适用于 分布式存储、高可用方案。
✅ Feature Identifier 84h: Namespace Write Protection Config(命名空间写保护配置)
📌 作用简介:
用于设置或查询 命名空间写保护状态(Write Protection State)。此 Feature 不可保存(Not Saveable),即写保护状态不会因设备掉电而持久保存。
🧠 核心字段(见 Figure 369):
| Bit | 字段 | 描述 |
|---|---|---|
| 02:00 | Write Protection State | 指定命名空间的写保护状态 |
| 31:03 | Reserved | 保留位 |
🚦可选写保护状态:
| 值(b) | 状态定义 | 说明 |
|---|---|---|
000b |
No Write Protect | 不写保护 |
001b |
Write Protect | 标准写保护(禁止写操作) |
010b |
Write Protect Until Power Cycle | 写保护直到掉电,掉电后恢复 |
011b |
Permanent Write Protect | 永久写保护,不可撤销 |
100b ~ 111b |
Reserved | 保留,不可使用 |
⚠️ 使用限制规则:
- 如果命名空间当前处于
Write Protect Until Power Cycle或Permanent Write Protect状态, - 则尝试修改写保护状态会返回错误:Feature Not Changeable
- 如果你想设置为
Write Protect Until Power Cycle,但控制器的 Write Protection Authentication Control 字段的 bit 0 为 0, - 同样会拒绝:Feature Not Changeable
📝 一些关键行为:
- 切换为写保护状态时:
- 控制器会强制将该命名空间的所有volatile cache 数据 & metadata提交到非易失介质(non-volatile media),
- 保证数据一致性 & 防止写后缓存丢失。
- 命令成功完成之前,控制器必须完全完成写保护状态转换,不能提前回应 CQE。
总结图表(两项 Feature 对比):
| Feature ID | 名称 | 适用层级 | 是否可保存 | 核心作用 |
|---|---|---|---|---|
| 83h | Reservation Persistence | Namespace | 否(应为) | 设置掉电是否保留 Reservation 注册信息 |
| 84h | Namespace Write Protection Config | Namespace | 否 | 设置命名空间的写保护状态(含永久) |
如果你需要我结合 Identify Namespace 数据结构中的 RESCAP 字段 或者需要实际的 Set Features 命令封包结构分析(e.g., 以 MCTP or PCIe 为传输通道),我可以继续为你讲解!
你要继续探索下一节(如 5.28 Admin Command:Get Features 命令行为),或者整理以上 Feature 的使用场景文档,也可以告诉我,我来帮你构思!