Direct Memory Access (DMA)
DMA is an important technique to allow efficient communication with peripheral devices. It allows data transfers between a host and an adapter to be treated as memory transfers. The host typically sets up some "DMA descriptors" to tell the device where outbound data is to be found, or where there is space for incoming data. Then the device can fetch those data from memory, or depose received data from memory, without involving the host CPU.
The DMA technique is used in practically all data-intensive adapters such as network and disk controllers.
The performance characteristics are that data can be transferred very quickly, as fast as the physical connections (e.g. memory and I/O buses) permit. Setup of individual transactions can be costly though. Therefore it is desirable to transfer data in large chunks. Techniques such as LSO
are examples for this.
On modern systems, DMA is often mediated by an I/O Memory Management Unit (IOMMU), for example to ensure isolation between different users in SR-IOV