持久内存与安全机制 - 第399页
NVME2.0协议解读 1 min read

持久内存与安全机制 - 第399页

Blog Author

我们继续深入分析 NVMe Base Specification 2.0b第 8.13.5.10 节到 8.14 节 的内容,涵盖以下两个关键主题:


🔐 8.13.5.10:DH-HMAC-CHAP 消息与认证命令的映射

这一节主要说明了:DH-HMAC-CHAP 协议的各类消息是如何通过 NVMe 命令在 host 与 controller 之间交互的

消息类型 发起方 映射到的 NVMe 命令
DH-HMAC-CHAP_Reply Host Authentication Send
DH-HMAC-CHAP_Success2 Host Authentication Send
DH-HMAC-CHAP_Challenge Controller Authentication Receive
DH-HMAC-CHAP_Success1 Controller Authentication Receive

➡️ 换句话说:

  • 从主机发出的消息(Reply、Success2) 是通过 Authentication Send 命令发送的;
  • 控制器发出的消息(Challenge、Success1) 是通过 Authentication Receive 命令接收的。

这确保了 每个方向的认证协议消息通过标准命令进行承载和验证


🧠 8.14 Persistent Memory Region(持久性内存区域 PMR)

这是一项高阶功能,定义了一块 具有持久性(Power-fail Safe)的 PCIe 内存区域,可用于数据交互、缓存、日志记录等用途。


🟨 基础概念

字段 说明
PMR Persistent Memory Region,持久性内存区域
PMRS (CAP寄存器位) 设置为 1 表示支持 PMR
PMRCAP 控制器能力寄存器,表明是否支持将命令数据/元数据通过 PMR 传输
PMRMSCU/PMRMSCL 定义 PMR 在控制器地址空间中的范围
PMRCTL.EN 设置为 1 启用 PMR 功能
PMRSTS.NRDY 0 表示 PMR 已准备就绪,可读写

📦 支持的功能场景

  • 将命令数据或元数据完整地放在 PMR 区域;
  • 支持高频读写的低延迟场景(如写缓存、日志缓冲区);
  • 跨掉电/重启/控制器复位保留数据
  • 可用作持久化日志或 NVMe Target 实现的共享写入空间。

🔁 地址映射机制

地址空间 作用
PCIe 地址空间 Host 通过 BAR 寄存器访问 PMR
Controller 地址空间 控制器通过内部地址计算访问 PMR
  • 二者在偏移地址上一一对应;
  • 控制器通过将 CMSE 设为 1,启用 Controller 地址空间访问 PMR。

⚠️ 注意事项

  • 在一次命令中,数据和元数据必须都在 PMR 中都不在 PMR 中
  • PMR 未准备好时(NRDY = 1),Host 不应向其发送数据;
  • 数据持久性的实现方式是厂商自定义的,可能是:
  • 实际写入非易失性存储;
  • 写入非易失性写缓冲,稍后再落盘;
  • 可选写弹性缓冲区(write elasticity buffer)允许 PCIe 写操作的突发吞吐量高于 PMR 实际写入能力;
  • 可以缓存数据,后续慢慢写入持久介质。

🧮 写操作耗时计算公式

  • N 字节所需时间 = N / Sustained Write Throughput
  • 弹性缓冲区耗尽时间 = Elasticity Buffer Size / Sustained Write Throughput

可参考: - PMR Sustained Write Throughput:见 3.1.3.26 - Elasticity Buffer Size:见 3.1.3.25


✅ 总结归纳

项目 说明
DH-HMAC-CHAP 消息映射 明确每条消息通过 Send 还是 Receive
PMR 启用 设置 PMRCTL.EN = 1,控制器准备后 PMRSTS.NRDY = 0
PMR 特性 持久性、支持数据/元数据传输、掉电保护、跨 reset 保留
写吞吐机制 可配合弹性缓冲区,支持 burst 写入
持久机制实现 厂商自定义(落盘 / 缓冲)

你接下来希望我继续解析:

  • 8.15 Asymmetric Namespace Access(ANA 详细机制)
  • 还是深入分析 PMR 的实际应用场景 + 编程示例
  • 或者画一张图展示 PMR 的地址映射 + 吞吐时序?

你说了算 😎