Megérkezett a DMA-BUF támogatás a kernel I/O útvonalán a kiváló IO_uring frameworkhez.
Erről a koncepcióról már egy ideje beszélnek, és korábban is készültek hasonló célú javítócsomagok, mostanra viszont a Linux 7.4 főágában is megjelent a DMA-BUF olvasási/írási támogatás IO_uringon keresztül. A Linux DMA-BUF frameworkje lehetővé teszi, hogy különböző eszköz driverek és alrendszerek hardveres memória buffereket osszanak meg a CPU általi másolás nélkül. A DMA-BUF különösen népszerű a GPU driverek körében, de a média- és hálózati drivereknél is dolgoznak rajta a hatékony, zero-copy buffermegosztásért.
A munkát vezető Pavel Begunkov, aki tizenegy javítócsomag-körön vitte végig a fejlesztést, így magyarázta az új funkciót:
"Ez egy opcionálisan bekapcsolható funkció a fájlok számára, és használatához új fájlműveletet kell megvalósítani. Ebben a sorozatban csak az NVMe blokk eszközöket támogatjuk. A felhasználói API az io_uring „regisztrált buffereire” épül, ahol egy dmabufot speciális módon regisztrálunk, de utána ugyanúgy használható, mint bármely más „regisztrált buffer” az IORING_OP_{READ,WRITE}_FIXED kérésekkel. Egy új fájlművelettel hozzuk létre, az eredményül kapott leképezést pedig egy új iterator típuson keresztül adjuk tovább az I/O stackben. Van némi extra infrastruktúra is, ami összefogja az egészet: számolja a kéréseket, kezeli az élettartamot és megvalósítja az érvénytelenítést."
A javítócsomag-sorozatban bemutatott benchmark eredmények kísérő levelében elég meggyőzőek:
Egyelőre csak a nyers NVMe PCIe blokk eszközökkel működik ez a megoldás. A blokk eszközökhöz tartozó DMA-BUF bufferek mérete legfeljebb 4 GB lehet. A funkcióról további részletek olvashatók ebben a Git merge-ben, amely a Linux 7.4-be került be.

