nvme-prp · shipping · also NVMe PRP, Physical Region Page

NVMe Physical Region Page

An NVMe Physical Region Page entry identifies a memory page or page portion used to transfer a command's data buffer.

For ordinary PRP-based Read and Write commands, PRP1 can start within the first memory page. When PRP1 alone is insufficient, PRP2 identifies a second data page or a list of additional page addresses [1]. The page is transfer memory, not NAND geometry.

With a 4 KiB controller memory page, an 8 KiB transfer starting at offset zero spans two pages; at offset 512 it spans three and needs a PRP list. This is address-span arithmetic, not a speed measurement [3].

On PCIe, buffer pointers contain device-visible DMA addresses, which an IOMMU can translate; an application pointer is not directly interchangeable with them [4].

List storage is separate: the initial list pointer may be 8-byte aligned within a page; later list pages are page-aligned. A page-aligned 4 KiB list has 512 slots, but a non-final list spends one on a link, leaving 511 data addresses. A nonzero starting offset reduces its slots [2].

Relations

related
nvme, nvme-sgl

Citations

  1. NVM Express 1.0e: revision history and PRP-based Read/Write; copyright 2007-2014 NVM Express, Inc., all rights reserved (accessed 2026-10-17)
  2. NVM Express Base 2.0a, sections 2 and 4.1; copyright 2007-2021 NVM Express, Inc., all rights reserved (accessed 2026-10-17)
  3. Linux v6.12: NVMe PCIe data mapping and PRP/SGL construction (accessed 2026-10-17)
  4. Linux 6.12: Dynamic DMA mapping guide, CPU and DMA addresses (accessed 2026-10-17)

Further reading

  1. Hesela: NVM Express technology card (accessed 2026-10-17)
Sources & caveats

JSON: /data/terms/nvme-prp.json