命名空间管理 - 📚 第 4 章:Data Structures(数据结构) (第140页)
NVME2.0协议解读 1 min read

命名空间管理 - 📚 第 4 章:Data Structures(数据结构) (第140页)

Blog Author

我们现在进入 《NVM Express® Base Specification, revision 2.0b》第129页 的内容,正式进入 第 4 章:数据结构(Data Structures),这一章节对于理解 NVMe 控制器与主机之间的数据交互非常关键。我们将重点解析 PRP(Physical Region Page)条目与列表 的定义与布局,并说明其在数据传输过程中的作用。


📚 第 4 章:Data Structures(数据结构)

✳️ 本章概览:

描述 NVMe 协议中用于主机与控制器交互的数据结构,特别是用于传输数据时的缓冲区地址表示机制


📦 4.1 Data Layout(数据布局)

✅ 核心机制之一:PRP(Physical Region Page)


📌 一、PRP Entry(物理页条目)

🧩 PRP 的作用:

  • PRP 是主机与控制器之间实现高效 DMA(直接内存访问)数据传输的核心机制。
  • 它是一种类似 scatter-gather(分散-聚集) 的地址机制:
  • 主机提供多个内存页的物理地址
  • 控制器按需读取或写入对应地址的数据

🏗️ PRP Entry 布局(Figure 108 + Figure 109)

字段 位宽 说明
Page Base Address + Offset 64 bits 指向物理页的地址,含页内偏移 Offset

注意:Offset 的位宽由内存页大小决定(取决于 CC.MPS 的设置)

例如: - 若页大小为 4 KiB,Offset = bits 11:0; - 若页大小为 8 KiB,Offset = bits 12:0; - dword 对齐要求:Offset 的低两位(bits 1:0)必须为 00b。

⚠️ 控制器行为说明:

  • 控制器 不强制校验 Offset 对齐,但可能返回 PRP Offset Invalid 错误;
  • 即便不报错,也会将低两位视为 00b。

✅ 使用场景说明:

  • 若 PRP 条目是第一个地址或 PRP List 指针,则 Offset 可非 0;
  • 否则,Offset 必须为 0(如用于列表中的后续条目)。

📑 二、PRP List(PRP 列表)

🧩 定义:

  • PRP List 是多个 PRP 条目的集合,通常用于数据传输量较大、单条命令无法携带全部地址时。
  • PRP List 自身也是一页连续内存,每个条目为一个 PRP Entry。

🧷 关键行为:

  • 命令中若已使用一个或两个 PRP Entry(通过 PRP1 和 PRP2),则 PRP List 中不再重复这些内容;
  • 当需要 多个 PRP List 内存页 时,在每个列表末尾放置一个 “下一页 PRP List”的指针,构成链表。

🖼️ PRP List 内存结构图(Figure 110)

用于表示 物理连续的内存页

PRP Entry 0: Page Base Address p      ← 指向页 p
PRP Entry 1: Page Base Address p+1    ← 指向页 p+1
...
PRP Entry q: Page Base Address p+q    ← 指向页 p+q

每个 Entry 指向一个物理页,每个页紧邻上一个页。


🧠 总结与教学关键点:

概念 说明
PRP Entry 64-bit 地址结构,包含物理页地址和页内偏移;作为 PRP1、PRP2 或 PRP List 项
Offset Offset 部分用于首地址,非首项需置 0;需 dword 对齐
PRP List 当数据量较大时,用于扩展地址列表,每页中多个 PRP Entry 描述物理页
PRP List 链接机制 每页最后一个 PRP Entry 可指向下一个 PRP List 的地址,实现多页扩展
控制器校验 控制器不强制校验 Offset,但可能返回错误或自动对齐处理

如果你想继续深入解析 Figure 111:非连续物理页的 PRP List 结构,或想系统学习 SGL(Scatter Gather List) 与 PRP 的区别与适用场景,我可以继续带你逐页学习与比较。

是否继续?