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.

