高级特性与优化 - 第328页
NVME2.0协议解读 1 min read

高级特性与优化 - 第328页

Blog Author

我们来继续深入讲解 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 CyclePermanent 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 的使用场景文档,也可以告诉我,我来帮你构思!