A Linux 7.0 kernel várhatóan jelentős javulást hoz az IO_uring IOPOLL-alapú lekérdezésében

A Linux-kernel aszinkron I/O interfésze, az io_uring, jelentős belső szerkezeti átalakításon esik át a közelgő Linux 7.0 fejlesztési ciklusban. Jens Axboe egy olyan problémát orvosolt, amely eddig lassította a nagy sebességű adatforgalmat: az úgynevezett IOPOLL (lekérdezéses) üzemmódban a rendszer eddig egyszerűen láncolt listát használt a függőben lévő műveletek kezelésére. Ennek a struktúrának a legnagyobb hátránya a rugalmatlanság volt. Ha több művelet várakozott a sorban, egy adott kérést csak akkor lehetett lezárni, ha a listában előtte lévő összes többi feladat is teljesült. Ez felesleges várakozási időt (latency) okozott, különösen akkor, ha különböző eszközökről volt szó, vagy ha egyazon eszköz eltérő sebességű kéréseit kellett feldolgozni.

A Linux 7.0 kernel várhatóan jelentős javulást hoz az IO_uring IOPOLL-alapú lekérdezésében

A megoldás: Duplán láncolt lista és független feldolgozás

A fejlesztés lényege, hogy a rendszer átáll a duplán láncolt listák (doubly linked list) használatára. Ez a változtatás lehetővé teszi, hogy az egyes I/O kéréseket tetszőleges sorrendben, a befejeződésük pillanatában azonnal eltávolítsák a várakozási sorból és lezárják.

Fengnan Chang (Bytedance) és Jens Axboe közös munkája révén megszűnik az „adatfeltorlódás” (IO accumulation). A kérések immár nem blokkolják egymást: amint egy lekérdezés sikeres, az io_uring azonnal értesíti a felhasználót, függetlenül attól, hogy a listában korábban szereplő kérések éppen milyen állapotban vannak. Ennek előnyeit a modern, ultra-gyors NVMe tárolók és az összetettebb, több eszközt érintő műveletek esetében lehet tapasztalni.

Látványos teljesítménynövekedés a kernelben a mérések alapján

A kód optimalizálása igencsak jól sikerült, ugyanis a közzétett benchmark eredmények alapján a javítás jelentősen megdobja az egy másodperc alatt elvégezhető műveletek számát (IOPS):

Teszt környezetAlap teljesítményJavítás utáni teljesítményNövekedés
Összetett terhelés (-c32)725K IOPS782K IOPS~8%
Célzott terhelés (-c1)880K IOPS895K IOPS~2%

Ezek az adatok is bizonyítják, hogy a Linux 7.0 kernel érkezésével a szerverek és a nagy teljesítményű munkaállomások még hatékonyabban lesznek képesek kiaknázni a modern tárolóeszközökben rejlő potenciált.