Linux 7.4 Wires DMA-BUF Into the io_uring I/O Path
Linux 7.4 introduces DMA-BUF support into the kernel's I/O path via io_uring, a change that extends the reach of the modern asynchronous I/O interface into territory it has not previously occupied. For administrators and developers working with accelerator-attached workloads, this represents a structural shift in how device memory can participate in storage operations without the traditional userspace copy path.
What the Integration Means Architecturally
DMA-BUF is a long-standing kernel mechanism for sharing memory buffers between drivers and devices without copying data through userspace. It was designed primarily for graphics and display pipelines, where a GPU writes into a buffer that a display controller then reads, and the kernel mediates that handoff. The buffer is referenced by a file descriptor, which makes it possible to pass it between processes or subsystems using standard Unix IPC.
io_uring, by contrast, is the kernel's high-performance asynchronous I/O interface. It allows applications to batch submission and completion of I/O operations through shared ring buffers in memory, dramatically reducing the number of syscalls and context switches involved in heavy I/O workloads. Until Linux 7.4, the data that io_uring operated on was conventional userspace or kernel memory. The I/O path did not natively understand DMA-BUF-backed buffers.
The 7.4 change closes that gap. DMA-BUF-backed buffers can now be referenced in io_uring submission entries, meaning the kernel's I/O scheduler and block layer can accept a DMA-BUF file descriptor as the source or destination of an I/O operation. The data path between an accelerator's memory and a storage device no longer requires an intermediate bounce buffer in general-purpose RAM.
Why This Matters for the Kernel I/O Stack
The significance is not merely performance in the narrow sense of fewer memory copies. It is a matter of which subsystems can participate in the I/O pipeline. Before this change, if a GPU or NPU produced data that needed to land on disk, the typical path was: accelerator writes to its own memory, the kernel or driver copies that data into a conventional page cache buffer, and io_uring (or a traditional syscall) submits that buffer to the block layer. Each copy consumes CPU cycles and adds latency, and the intermediate buffer must be large enough to hold the entire transfer.
With DMA-BUF support in the io_uring path, the block layer can reference the accelerator's buffer directly. The storage device's DMA engine reads from or writes to the accelerator's memory through the IOMMU, and the kernel's role is limited to managing the buffer's lifecycle and the I/O completion. This is the same architectural principle that allows zero-copy networking to work with DMA-BUF, now applied to storage.
For kernel developers, this also means the block layer's understanding of "where does this I/O's data live" is no longer restricted to page-allocated memory. The address space that a block request can target now includes device-attached buffers, which has implications for how future drivers and storage backends are written.
Practical Implications for Operators and Developers
For system administrators, the immediate practical change is limited. No configuration change is required to enable the feature; it is a kernel-level capability that becomes available once the 7.4 kernel is in use. The benefit is realized only when the userspace stack — the application, its I/O library, and the relevant device drivers — is written to take advantage of it. Existing applications that use conventional read/write or libaio will see no difference.
For developers building data pipelines that move data between accelerators and storage — inference result logging, training checkpoint writes, media transcoding with GPU-accelerated decode and direct write to NVMe — this removes a structural constraint. The application can now submit an io_uring request that references a DMA-BUF fd directly, rather than staging the data through a conventional buffer first. Whether this translates into measurable throughput or latency gains depends on the specific hardware topology, the IOMMU configuration, and the storage device's DMA capabilities, none of which the kernel change alone determines.
The broader implication is that Linux 7.4 narrows the gap between the kernel's graphics/memory-sharing subsystem and its storage subsystem. DMA-BUF becomes a first-class citizen in the I/O path rather than a graphics-only concept, which positions the kernel to support increasingly heterogeneous hardware configurations where the boundary between "compute memory" and "I/O memory" is becoming less meaningful.
Source: phoronix.com