IO_uring blijft een van de grootste Linux-kernelinnovaties van de afgelopen jaren en met de in ontwikkeling zijnde Linux 6.0-kernel wordt het nog beter, samen met enkele mooie blokupdates en andere opslaggerelateerde verbeteringen.

IO_uring hoofdontwikkelaar en beheerder van bloksubsystemen Jens Axboe van Meta heeft zijn verschillende pull-verzoeken van Linux 6.0-wijzigingen ingediend. Met de IO_uring-updates voor Linux 6.0 zijn er efficiëntieverbeteringen aan de taak-werkafhandeling, verbeteringen aan de verstrekte buffer, verbetering van de hash-vergrendeling voor annuleren, ondersteuning voor recv/revgmsg multi-shot-ondersteuning voor betere efficiëntie met toepassingen die veel ontvangsten doen op een geïnstantieerde socket, efficiëntieverbeteringen voor poll-afhandeling, en een veel andere opruimingen/verbeteringen.

Een extra trekkracht voegt gebufferde schrijfondersteuning toe aan IO_uring. De IO_uring gebufferde schrijfbewerkingen zijn gereed met ondersteuning voor XFS, terwijl ondersteuning voor het Btrfs-bestandssysteem in uitvoering is. Axboe legt in die pull uit:

io_uring ondersteunt gebufferde schrijfacties op elk bestandstype, maar aangezien het gebufferde schrijfpad gewoon altijd-EAGAIN (of-EOPNOTSUPP) elke poging daartoe doet als IOCB_NOWAIT is ingesteld, elke gebufferde schrijfactie wordt effectief afgehandeld door io-wq offload. Dit is niet erg efficiënt en we hebben zelfs specifieke code in io-wq om gebufferde schrijfbewerkingen naar dezelfde inode te serialiseren om verdere inefficiënties met thread-offload te voorkomen.

Dit is bijzonder triest, aangezien de meeste gebufferde schrijfbewerkingen niet blokkeren, ze kopiëren gewoon gegevens naar een pagina en vervuilen deze. Met dit pull-verzoek kunnen we gebufferde schrijfacties veel efficiënter afhandelen. Als balance_dirty_pages() moet worden geblokkeerd, stoppen we met schrijven zoals aangegeven.

Dit verbetert de gebufferde schrijfondersteuning met 2-3x.

Nog een pull introduceert zero-copy send-ondersteuning voor IO_uring. De IO_uring zero-copy-verzending is een grote overwinning voor use-cases voor netwerken. Deze zero-copy send met IO_uring werkt voor IPv4 en IPv6, zowel TCP als UDP.

Buiten IO_uring hebben de blokkeringswijzigingen ingediend, waaronder verschillende opschoningen, de nieuwe driver voor gebruikersruimteblok met IO_uring en meer.

Ten slotte zijn de wijzigingen van het blokstuurprogramma met de NVMe-code die nu ondersteuning biedt voor in-band authenticatie, verbeterde RAID5-slotconflicten in de MD-code en verschillende andere verbeteringen/reparaties/opruimingen.

Ondertussen plaagt Jens Axboe een nieuwe AMD EPYC-server met 128 cores en 24 Optane-schijven (Dell PowerEdge R7525) waarmee hij speelt:

122 miljoen IOPS in 2U, met > 80% van het systeem inactief. Makkelijk.#io_uring #linux pic.twitter.com/Ij9VzUrEhY

— Jens Axboe (@axboe) 1 augustus 2022

Met de huidige Linux-kernel hij haalt momenteel 122 miljoen IOPS met de 2U-server terwijl meer dan 80% van het systeem inactief is. Het zal leuk zijn om te zien welke verdere I/O-prestatie-optimalisaties hij met die hardware kan verkennen.

Categories: IT Info