Nvme prp sgl
时间: 2025-01-15 17:52:35 浏览: 60
### NVMe PRP 和 SGL 的概念与实现
#### 物理区域页 (PRP)
主机通过物理区域页(PRP, Physical Region Page)告知固态硬盘(SSD)数据所在的具体内存位置。PRP 是一种简单的线性地址映射机制,适用于较小的数据传输场景。当数据量较小时,可以直接使用单个 PRP 来描述整个缓冲区的位置[^1]。
对于较大的数据传输需求,则可能需要多个连续的 PRP 页面来覆盖完整的缓冲区范围。每个页面大小通常为 4KB 或者更大,具体取决于硬件平台的设计规格。如果传输的数据长度超过了单一 PRP 能够表示的最大限度,则会采用链表形式连接多个 PRP 实现更大数据集的传递[^2]。
```c
struct nvme_prp {
uint64_t prp1; /* First physical page address */
uint64_t prp2; /* Second physical page address or pointer to next PRP list */
};
```
#### 分散/聚集列表 (SGL)
随着 NVMe 协议版本升级至 1.1 及以上,在原有基础上增加了对分散/聚集列表(SGL, Scatter/Gather List)的支持。相比起 PRP 方式而言,SGL 提供了一种更加灵活高效的方式来处理不连续分布于内存中的数据片段集合。它允许将非连续存储单元组合成逻辑上的连续流来进行批量操作,从而提高了 I/O 效率并减少了 CPU 开销。
在实际应用中,SGL 结构可以由一系列条目组成,每一条记录着一段特定长度的数据块及其对应的物理地址偏移值。这种方式特别适合用于网络通信、文件系统等应用场景下的零拷贝技术实施以及高性能计算环境里大规模并发访问模式下优化磁盘读写性能的需求。
```c
struct nvme_sgl_descriptor {
uint64_t addr; /* Memory address of the data segment */
uint32_t length; /* Length of this segment in bytes */
uint8_t type_flags; /* Type and flags information */
};
```
阅读全文
相关推荐
















