Úvod
Theodore Ts'o je hlavním vývojářem utilit e2fsprogs, které slouží k práci se souborovými systémy ext(2,3,4) a angažuje se i na vývoji ext4. O něm jsme minulý týden informovali, že začal tento souborový systém sám používat na svém notebooku. Píše, že sice bude zálohovat trochu častěji, ale až na jeden malý problém nenarazil na nic co by mu bránilo v práci. Ext4 přichází se spoustou vlastností zlepšující výkon a omezující fragmentaci. Nově také přichází s možností defragmentovat celý souborový systém online.
Historie
Ext4 je sice mladý souborový systém, ale jelikož vychází, stejně jako jeho předchůdci, z dlouho vyvíjené verze, tak by se dalo říct, že první verze souborového systému ext se objevila v roce 1992. Samotné ext4 začalo vznikat v roce 2006. Jedná se opět o fork stávajícího souborového systému (ext3), do kterého jsou postupně přidávány další vlastnosti. Vývojáři ext3 navrhli několik vylepšení pro svůj souborový systém a některé byly dokonce implementovány, ale další nikoli a začalo se mluvit o vytvoření další verze ext. Někteří vývojáři navrhli, že by bylo lepší, kdyby ext3 zůstalo stabilní a nové vlastnosti se implementovaly až do ní. Argumenty pro vytvoření forku nakonec vývojáře přesvědčily a do jádra 2.6.19 se přidala podpora pro ext4.
Vlastnosti
Ext4 je na novinky bohatý. Poráží i starý limit maximální velikosti oddílu, který má ext3 na hodnotě 16 TiB při velikosti 8 KiB na jeden blok. Ext4 může mít oddíl veliký 1 exabyte. Stále se daří udržet dopřednou a zpětnou kompatibilitu, takže ext3 může uživatel připojit jako ext4 a obráceně. Byl také odstraněn limit 32 000 podadresářů v adresáři. Také byla přidána online defragmentace, což je vlastnost, jejíž absence je vyčítána Linuxu velmi dlouho.
Extents
Jednou z nedůležitějších novinek souborového systému ext4 jsou extenty. Jedná se o vlastnost, která dokáže namapovat velký rozsah fyzických bloků na disku na jeden ukazatel. Takhle jde spojit až 128 MiB velký prostor s velikostí bloků 4 KiB. To vylepšuje výkon, protože souborový systém nemusí hledat jednotlivé kousky souboru na disku a všechno má napsané v jednom extentu.
Persistent pre-allocation
Ext4 také řeší nově prealokaci bloků pro jeden soubor. Doposud se pro tuto činnost používala metoda, kdy se do souboru zapsalo spousty nul a tím se alokovalo potřebné místo navíc. Do ext4 bylo kvůli tomuto problému přidáno nové systémové volání preallocate(). Takto alokované místo by nemělo být fragmentované. Toto velmi ocení databázové systémy a také programy pro záznam různých audio a video přenosů, které ukládají data postupně podle toho, jak přijdou.
Delayed allocation
Občas se stává, že otevřené soubory postupně mění svoji velikost a rostou. Souborový systém se k těmto souborům chová tak, že data, která má zapsat, zapíše, a pokud je potřeba přidat další data, tak se může stát, že budou umístěny někde jinde a vznikne fragmentovaný soubor. Ext4 se snaží tomuto zabránit tím, že oddálí samotný zápis a hledání volných bloků, co nejvíce je to možné.
Multiblock allocator
Multiblock allocator slouží k namapování velkého množství bloků, učených pro jeden soubor, v jedné operaci. Díky tomu může souborový systém najít na disku dostatečný nefragmentovaný volný prostor, kam se všechna data bez fragmentace umístí. Tato vlastnost dovoluje programům odeslat hodně bloků najednou na rozdíl od existujícího mechanismu v jádře, které dovoluje posílat bloky pouze po jednom.
Vylepšený timestamp
Linux se dostává do velmi specifických zařízení a občas některé z těchto zařízení potřebuje přesnější čas než vyjádření timestampu po vteřinách. Jádro 2.6.23 přidává nanosekundy ke stávajícímu timestampu v systému a tohoto vylepšení využívá i ext4. Jako přídavek se k sekundové části přidaly 2 bity navíc a tím se posunul problém roku 2038 o dalších 500 let.
Vylepšená kontrola souborového systému
Program e2fck může nově ignorovat bloky nealokovaného místa a tabulku inodů a soustředí se jen na části souborového systému, kde by mohla být chyba. To zrychlí kontrolu celého souborového systému.
Výkonové porovnání s reiserfs
V dnešním článku jsem se rozhodl místo bonie++, použít jiné testy, které mají blíže k realitě. Testovací stroj je s procesorem AMD Athlon X2, má k dispozici 2 GiB RAM a LVM pole na discích 120+320+320 GiB. Při každém z testu je souborový systém vytvořen znovu a je použit 7 GiB velký oddíl, který je umístěn na konci 320 GiB disku. Jádro je použito z Gentoo a ext4 je zkompilováno bez podpory rozšířených práv a SELinuxu.
Vytvoření velké adresářové struktury
V tomto testu vytvořím adresářovou strukturu s pěti adresáři a každý z těchto adresářů bude mít 50 podadresářů. Každý adresář dále obsahuje 1000 souborů s obsahem několika málo bytů. Této struktury budu dále využít u testů s kompresí, dekompresí a u kopírování malých souborů. Pro vytvoření souborů používám malý script napsaný v pythonu. Pro každý test vytvářím souborový systém znovu a data, která budou použita, tam kopíruji z jiných oddílů (/tmp).
Souborový systém | real | user | sys |
---|---|---|---|
ext4 | 0m24.505s | 0m2.788s | 0m11.192s |
reiserfs | 0m24.381s | 0m3.041s | 0m20.989s |
V kernel space jasně vede ext4, celkový čas vytváření je podobný.
Komprese souborů
Souborový systém | real | user | sys |
---|---|---|---|
ext4 | 0m55.063s | 0m52.581s | 0m2.376s |
reiserfs | 0m56.443s | 0m52.752s | 0m3.390s |
Celkový čas je opět podobný, ale s ext4 se systém se soubory méně zabývá.
Dekomprese souborů
Souborový systém | real | user | sys |
---|---|---|---|
ext4 | 0m25.110s | 0m3.140s | 0m11.157s |
reiserfs | 0m24.330s | 0m3.255s | 0m20.231s |
Tento test dopadl podobně jako první. Vítěz je tedy ext4.
Kopírování malých souborů
Souborový systém | real | user | sys |
---|---|---|---|
ext4 | 0m26.331s | 0m0.000s | 0m0.002s |
reiserfs | 0m21.998s | 0m0.541s | 0m20.185s |
Kopírování souborů se u ext4 v kernel space prakticky neprojeví. Celkový čas je ovšem horší pro ext4.
Kopírování velkých souborů
Souborový systém | real | user | sys |
---|---|---|---|
ext4 | 0m5.995s (200 MiB) a 0m22.549s (800MiB) | 0m0.005s (200 MiB) a 0m0.012s (800MiB) | 0m0.572s (200 MiB) a 0m2.487s (800MiB) |
reiserfs | 0m5.625s (200 MiB) a 0m23.379s (800MiB) | 0m0.010s (200 MiB) a 0m0.019s (800MiB) | 0m1.042s (200 MiB) a 0m3.950s (800MiB) |
Pro tento test jsem se rozhodl použít film Big Buck Bunny s celkovou velikostí asi 200 MiB a Elephants Dreams s velikostí 800 MiB.
Shrnutí testů
Co se týče kernel space, tam jasně vede ext4, které se drží v jádře mnohem kratší dobu. Na druhou stranu celkový čas operace (který je ovlivněn parametry samotného disku) je velmi podobný. Ext4 má ve výkonu určitě co nabídnout.
Plánujete nasadit ext4?
Závěr
Nové vlastnosti ext4 nejsou revoluční, ale spíš evoluční. Vývojáři si vytyčili jasné a reálné cíle a těch se drží. Ext4 je s každou verzí jádra použitelnější a osobně uvažuji o jeho použití na desktopu pro systémový oddíl. Je pravděpodobné, že se začne pomalu dostávat do distribucí, které ho budou mít nastavený jako výchozí souborový systém. Ext4 se ukázal jako velmi výkonný a jeho vlastnosti by měly udržet systém rychlý i při dlouhodobějším používání.