A Linux 6.19 kernelben gyorsuló blokk­ alrendszer és továbbfejlesztett NVMe-kezelés érkezik

A Linux 6.19 kernelhez a múlt héten érkezett meg a blokk- és IO_uring alrendszer fő funkcionális frissítése, amelyhez hétfőn további kiegészítő javítások társultak. Ezek részben az NVMe-kezelést érintik, részben pedig egy olyan változtatást vezetnek be, amely alapértelmezetté teszi a per-CPU BIO gyorsítótár használatát. Ez utóbbi különösen érdekes fejlemény, mivel nem látványos újdonság, mégis a fájlrendszerek teljesítményére is kézzelfogható hatással lehet. A módosítás mögött a Bytedance egyik mérnöke áll, aki szerint a gyorsítótár eddig csak az IO_uring + raw block eszközök kombinációjánál volt kihasználva, noha a fájlrendszerek is jelentős előnyöket tudnak kovácsolni belőle. A fejlesztők ezért úgy döntöttek, hogy a per-CPU BIO cache minden esetben legyen bekapcsolva.

A Linux 6.19 kernelben gyorsuló blokk­ alrendszer és továbbfejlesztett NVMe-kezelés érkezik

Minimális, de érzékelhető gyorsulás

A változtatás hatását konkrét tesztek is alátámasztják. Egy ext4 + NVMe környezetben, IO_uring alapú terheléssel a műveleti sebesség 562 ezerről 574 ezer IOPS-re nőtt, miközben a bio_alloc_bioset CPU-használata 1,42 százalékról 1,22 százalékra csökkent. Bár a javulás első ránézésre nem tűnik látványosnak, a kernel fejlesztésében ezek a néhány százalékos optimalizálások hosszú távon összeadódnak, és komoly stabilitási, illetve energiahatékonysági előnyöket adnak. A legrosszabb esetet is megvizsgálták, amikor a Block I/O-t az egyik processzoron foglalják, de egy másikon szabadítják fel — itt gyakorlatilag nincs különbség az alap és a módosított verzió között. További tesztek ext4 és XFS fájlrendszerekkel, null_blk és NVMe eszközökön, libaio-val, szinkron móddal és IO_uringgel sem mutattak semmiféle teljesítményromlást, vagyis a változtatás megbízhatóan skálázódik különböző környezetekben.

Új ioctl-ek a blokkrétegben

A kernel blokk alrendszer frissítései nem merülnek ki a gyorsítótár kezelésének átalakításában. Az NVMe-komponens egy külön pull request formájában érkezett a kernelbe. A most beolvasztott változtatások között használattal kapcsolatos tisztítások, hibaellenőrzések, debug kimenetek, Fibre Channel fabric javítások, konzisztensebb allokációs API-használat és a hitelesítési hibák kezelésével kapcsolatos módosítások is helyet kaptak. A blokk alrendszerben emellett kijavítottak egy memóriaszivárgást a discard ioctl útvonalán, továbbfejlesztették a zoned write plugging logikát, és új ioctl-eket vezettek be a tartós foglalások (persistent reservations) kulcsainak és státuszának lekérdezésére.