Direct Memory Access
Keywords
Prerequisites
Related Papers
- What Modern NVMe Storage Can Do, And How To Exploit It(PVLDB 2023)
- DuckDB on xNVMe(arXiv 2025)
Progress
Sign in to track your progress.
當 CPU 親自負責在記憶體與裝置之間搬運資料時,它就無法同時做其他運算,這在高速 I/O 場景下會成為嚴重瓶頸。DMA(Direct Memory Access)讓裝置可以直接存取主記憶體,不需要 CPU 介入每一筆資料的傳輸。為了支援 DMA,我們需要配置 physically contiguous 且 device-accessible 的 memory buffer,因為裝置通常使用 physical address 來定址。當資料分散在多個不連續的記憶體區段時,scatter-gather list 允許我們在一次 DMA 操作中描述多段記憶體位置,避免不必要的資料複製。這種機制也是 zero-copy I/O 的基礎——資料可以直接在裝置與應用程式的 buffer 之間傳輸,省去在 kernel buffer 中轉的開銷。理解 DMA 的運作方式,對於後續學習 NVMe 和 kernel-bypass I/O 如何達到極低延遲至關重要。
Key Concepts
我理解為什麼需要 DMA:當 CPU 親自搬運資料時會佔用運算資源,DMA 讓裝置直接存取記憶體以釋放 CPU 去做其他工作
我理解 DMA 對記憶體的要求,知道裝置使用 physical address 定址,因此 DMA buffer 必須是 physically contiguous 且 pinned 在實體記憶體中不被 swap 出去
我理解 scatter-gather list 的用途,知道它允許一次 DMA 操作描述多段不連續的記憶體區段,避免必須先將資料複製到連續 buffer 的額外開銷
我理解 zero-copy I/O 的概念,知道它讓資料直接在裝置與應用程式 buffer 之間傳輸,省去經由 kernel buffer 中轉的複製成本