nvme-sgl · shipping · also NVMe SGL, NVMe Scatter-Gather List

NVMe Scatter Gather List

An NVMe Scatter Gather List describes a command's data transfer using typed descriptors for buffers or descriptor segments.

Address-based SGL Data Block descriptors carry a buffer address and length; other forms use offsets or transport-specific semantics. Segment descriptors locate further descriptors. Permitted forms and alignment depend on controller capabilities and transport [1].

Linux v6.12's PCIe driver builds data-block descriptors from mapped DMA addresses and lengths, and selects PRP or SGL according to support and request characteristics [2]. One contiguous mapped segment can cover multiple memory pages; descriptor count is not queue depth.

A Linux scatterlist used while mapping a request is not necessarily the NVMe SGL sent to the controller: the mapped request can instead become PRPs [2]. SGL use alone does not establish lower latency.

Relations

related
nvme, nvme-prp

Citations

  1. NVM Express Base 2.0a, sections 2 and 4.1; copyright 2007-2021 NVM Express, Inc., all rights reserved (accessed 2026-10-17)
  2. Linux v6.12: NVMe PCIe data mapping and PRP/SGL construction (accessed 2026-10-17)

Further reading

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

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