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
- NVM Express Base 2.0a, sections 2 and 4.1; copyright 2007-2021 NVM Express, Inc., all rights reserved
- Linux v6.12: NVMe PCIe data mapping and PRP/SGL construction