Článek volně navazuje na článek podivný výkon PostgreSQL v závislosti na FS. Po měření vlivu IO plánovače jsem se pustil i do měření výkonu PostgreSQL na jednotlivých systémech souborů.
Podmínky měření
- HW: Intel(R) Core(TM)2 CPU 6320; 8GB DDR2-800; HDD SAMSUNG HD103UJ
- SW: CentOS 5.5 64b (2.6.18-194.11.1.el5.centos.plus); postgresql-8.4.4
- IO plánovač: deadline
- Každý systém souborů byl vytvořen na LV 32GB, po vytvoření na něj byla nakopírován PosgreSQL.
- Výchozí podmínky měl tedy každý FS stejné, stejnou DB, stejný LV.
- Vypnuté bariéry. LVM je na tomto jádře nepodporuje.
Měřené systémy souborů
- ext2: e2fsprogs-1.39-23.el5
- ext3: e2fsprogs-1.39-23.el5 (ext2 a ext3 mají společný kód)
- ext4: e4fsprogs-1.41.9-3.el5
- reiserfs: reiserfs-utils-3.6.19-2.4.1
- jfs: jfsutils-1.1.12-1
- xfs: xfsprogs-2.9.4-1.el5.centos
Ext2
Starý systém souborů, nemá žurnál. Do testu jsem ho přidal pro porovnání výkonu, pro reálné nasazení je dnes již nepoužitelný (velmi dlouhá kontrola a případná oprava po nesprávném odpojení).
Ext3
Současný výchozí systém souborů v CentOS. Bez jádra centos-plus je to jediný možný fs. Hlavní vylepšení oproti ext2 je ukládání změn na disku do logu (žurnálu), který lze v případě výpadku snadno přehrát při následujícím připojení a tedy (do značné míry) eliminovat potřebu kontroly systému souborů.
Ext3 umožňuje provozovat žurnál ve třech módech (ordered, writeback, data_journal), v tomto měření jsem záměrně ponechal výchozí ordered. Měření výkonu pro jednotlivé módy mám v plánu později.
Ext4
Moderní systém souborů, k původnímu ext3 přidává zejména alokaci pomocí rozsahů (místo původní tabulky bloků), odloženou alokaci (snižuje externí fragmentaci souborů) a další. V CentOS 5.5 je dostupný pouze jako Technology Preview.
ReiserFS 3.6
Moderní žurnálovací systém souborů. Je založený na vyvážených B+ stromech, rozsazích a efektivně (co se týče úložného prostoru) ukládá malé soubory. A to buď rovnou do adresářových struktur, či do nezaplněných bloků (výchozí volba připojení: tail). V CentOS 5.5 není, je nutné použít centos-plus.
JFS
Moderní žurnálovací systém souborů od společnosti IBM. Vyniká zejména velmi nízkými nároky na výpočetní výkon (dnes se tato vlastnost ocení na nevýkonném netbooku), je opět založený na rozsazích a efektivně ukládá malé soubory přímo do (dvou různých) adresářových struktur. V CentOS 5.5 není, je opět nutné použít centos-plus.
XFS
Po ext2 (1993) druhý nejstarší systém souborů (1994) v testu, tento je od SGI (vzpomínáte si ještě?). Plně 64b (v mailling listu lze dokonce najít doporučení od vývojářů o nepoužívání tohoto fs na 32b systému), paralelní přístup (mnoho procesorů, mnoho disků). Založený na rozsazích, adresářová struktura navržená na vysoký počet položek. Používá se na velkých diskových polích (stovky TB). Jako jediný má v současné době možnost online defragmentace. V CentOS 5.5 je jako technology preview.
Testoval jsem jej ve dvou konfiguracích. Jednak ve výchozí a také optimalizovaný (viz také článek o optimalizaci XFS), který používám pro velké diskové pole:
mkfs.xfs -l size=128m,version=2 /dev/system/db mount /dev/system/db /mnt/db -o rw,noatime,nodiratime,nobarrier,biosize=16,logbufs=8,logbsize=32768
Měřící skript
Vytvoření systému souborů, inicializace PostgreSQL:
service postgresql stop mkfs.ext2 /dev/system/db # s úpravou pro každý testovaný fs mount /mnt/db cp -a /system/db /mnt/db service postgresql start pgbench -i -s 32 sync
Test, vždy 4x:
pgbench -c 32 -M prepared -t 1000
Výsledky měření
fs | tps | prumer tps | pomer vykonu % | |||
ext2 | 542 | 605 | 680 | 701 | 632.00 | 100 |
ext3 | 274 | 293 | 310 | 295 | 293.00 | 46.36 |
ext4 | 103 | 109 | 106.00 | 16.77 | ||
reiserfs | 101 | 101.00 | 15.98 | |||
xfs-default | 509 | 529 | 581 | 588 | 551.75 | 87.3 |
xfs-optimized | 509 | 532 | 657 | 610 | 577.00 | 91.3 |
jfs | 514 | 558 | 622 | 631 | 581.25 | 91.97 |
Interpretace výsledků
Vítěz je nežurnálovací ext2, což se dalo očekávat. Jak jsem psal výše, tento fs jsem zařadil pouze pro porovnání, pro produkční nasazení je dnes zcela nevhodný (vysvětluje zákazníkovi, že se 6h kontroluje fs a dalších 20 ještě bude :-)).
Ext3 je ve výchozím nastavení žurnálu (ordered) výjimečně bezpečný, data jsou zapsána na disk nejpozději do 5s. Jeho výkon tomu také odpovídá a není vůbec špatný. Při troše optimalizace (writeback, commit=600, noatime), z něj jistě dostanu více.
Propad ext4 bude zřejmě nějaká nevhodná interakce použité verze PostgreSQL, jádra a ext4. Nedělal bych z toho předčasné závěry, do produkčního nasazení mu ještě nějaký ten pátek zbývá (počkejme na RHEL 6.0). Stejně jako u ext3 je i zde možnosti si pohrát s módem žurnálu.
Pojďme k skutečným vítězům, XFS a JFS. Optimalizované XFS a JFS jsou od sebe 0,67% bodu, což je méně než je chyba měření(JFS: 581 +-48 tps, XFS: 577 +-53 tps), a celkově pouze o 8 % pomalejší, než nežurnálovací vítěz. Skvělý výsledek, k vynikajícímu výkonu dostanete i rychlou obnovu díky žurnálu!
Mno, a co teď s tím reiserfs? 16% výkonu je tristní výsledek. Google mlčí. Možná by pomohla změna velikosti bloků na 8kB a vypnout tail. Skutečně netuším.
Závěr
Vítěze tedy známe. JFS a XFS. První jmenovaný je často opomíjený, moc se o něm nepíše (a pokud, tak jen z hlediska nízké náročnosti na procesor). Ani v CentOSu a RHELu jej nenajdeme. Podle tohoto měření by mohl být dobrou volbou.
V závěsu druhý, XFS, je starý známý. Hojně používaný FS pro velká data na velkém poli, výkonný a léty prověřený. Je dobrý i ve standardním nastavení, při nastavení několika parametrů lze získat nějaké to procento výkonu navíc. Osobně doporučuji (a sám používám) právě XFS a to nejen na základě tohoto měření.