EXT4 fájlrendszer: nagyobb blokkméret támogatása a teljesítmény növelésére

Segítséget kaptál? Szívesen töltöd itt az idődet? Visszajársz hozzánk? Támogasd a munkákat: Ko-fi és Paypal!

kami911 képe

Az EXT4 fájlrendszer új fejlesztései lehetővé teszik, hogy a blokkméret meghaladja a kernel oldalméretét, így a Linux tárolórendszerek teljesítménye tovább javulhat. A változtatás követi a Btrfs és XFS fájlrendszerek hasonló fejlesztéseit, amelyek már korábban bevezették a nagyobb blokkméretek támogatását. A Huawei mérnöke, Baokun Li szombaton küldte ki a patch-sorozatot, amely az EXT4 nagy blokkméret (Large Block Size, LBS) támogatását valósítja meg.

Miért fontos a nagy blokkméret?

Az EXT4 már eddig is támogatta a nagy foliókat (large folios), azonban a nagyobb blokkméretek helyes kezeléséhez kisebb kódmódosításokra volt szükség az egész EXT4 kódbázisban. A nagy blokkméret fő előnye a BIO írási teljesítményének javítása, amely a tesztek szerint átlagosan 50%-kal jobb a korábbi bigalloc módszerhez képest.

Teljesítménytesztek és eredmények

A benchmarkok különböző blokkméretekkel mérték az EXT4 teljesítményét BIO és DIO írási módban. A régi 4k blokkméret esetén a teljesítmény stabil maradt, míg az új LBS támogatással a 64k blokkméretű BIO írási sebesség 6 GB/s-ig nőtt, szemben a korábbi 3,8 GB/s-al. DIO írás esetén azonban némi teljesítménycsökkenés figyelhető meg, különösen kisebb blokkméretek és nagyobb fájlrendszer-blokkok esetén, maximális visszaesés 30% körüli. Ez a csökkenés főként az ext4_block_bitmap_csum_set() függvényben a crc32c_arch() számítás idejének növekedéséből adódik.

Az alábbi vizsgálat során az EXT4 fájlrendszereket különböző blokkméretekkel teszteltük, egy szálas dd írási sávszélességet mérve BIO (buffered I/O) és DIO (direct I/O) esetén, különböző bs (block size) értékek mellett. A tesztek két állapotban készültek: eredeti (Before, PAGE_SIZE=4096) és javított (Patched, PAGE_SIZE=4096). A javítás az úgynevezett LBS (Large Block Support) kódváltoztatásokat tartalmazta, amelyek a nagyobb fájlblokkok kezelését optimalizálják.

Fő megállapítások

  • A kódváltoztatások gyakorlatilag nem befolyásolják az eredeti 4k írási teljesítményt.
  • Az LBS átlagosan 50%-kal javítja a BIO írási teljesítményt a bigalloc-hoz képest.
  • Az LBS viszont csökkenti a DIO írási teljesítményt, ami a fájlrendszer blokkméretének növekedésével és a teszt bs értékének csökkenésével fokozódik, maximális teljesítménycsökkenés kb. 30%.

Eredeti (Before, PAGE_SIZE=4096)

BIO teljesítmény (GB/s)

Blokkméret bs=4k bs=8k bs=16k bs=32k bs=64k
4k 1,5 2,1 2,8 3,4 3,8
8k (bigalloc) 1,4 2,0 2,6 3,1 3,4
16k (bigalloc) 1,5 2,0 2,6 3,2 3,6
32k (bigalloc) 1,5 2,1 2,7 3,3 3,7
64k (bigalloc) 1,5 2,1 2,8 3,4 3,8

DIO teljesítmény (MB/s)

Blokkméret bs=4k bs=8k bs=16k bs=32k bs=64k
4k 194 366 626 1000 1400
8k (bigalloc) 188 359 612 996 1400
16k (bigalloc) 208 378 642 1000 1400
32k (bigalloc) 184 368 637 995 1400
64k (bigalloc) 208 389 634 1000 1400

Javított (Patched, PAGE_SIZE=4096)

BIO teljesítmény (GB/s)

Blokkméret bs=4k bs=8k bs=16k bs=32k bs=64k
4k 1,5 2,1 2,8 3,4 3,8
8k (LBS) 1,7 2,3 3,2 4,2 4,7
16k (LBS) 2,0 2,7 3,6 4,7 5,4
32k (LBS) 2,2 3,1 3,9 4,9 5,7
64k (LBS) 2,4 3,3 4,2 5,1 6,0

DIO teljesítmény (MB/s)

Blokkméret bs=4k bs=8k bs=16k bs=32k bs=64k
4k 204 355 627 1000 1400
8k (LBS) 210 356 602 997 1400
16k (LBS) 191 361 589 981 1400
32k (LBS) 181 330 581 951 1300
64k (LBS) 148 272 499 840 1300

Mikor érdemes nagy blokkméretet választani?

A fejlesztések világosan mutatják, hogy a nagyobb blokkméret nem mindig jobb, és a választást az I/O terhelés jellemzői alapján kell meghozni. Nagy blokkméretek ideálisak lehetnek nagy, szekvenciális írási feladatokhoz, míg a kis blokkméretek hatékonyabbak lehetnek random, apró fájlokkal dolgozó rendszereknél.

További fejlesztések és elérhetőség

A jövőben további optimalizációkat terveznek a blokkok kiosztására a nagy blokkméretek mellett. A patch-eket és részletes technikai információkat a Linux kernel levelezési listán érhetik el az érdeklődők. Ez a fejlesztés az EXT4-et a modern tárolórendszerek teljesítményének élvonalába helyezheti, miközben nagyobb rugalmasságot biztosít a rendszeradminisztrátorok számára a blokkméret kiválasztásában.