Měření výkonu PostgreSQL na různých systémech souborů

Č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

Poměr výkonu PostgreSQL v závislosti na systému souborů

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í.

Příspěvek byl publikován v rubrice CentOS, Linux, PostgreSQL, Systémy souborů. Můžete si uložit jeho odkaz mezi své oblíbené záložky.

7 komentářů: Měření výkonu PostgreSQL na různých systémech souborů

  1. lzap napsal:

    Pěkné srovnání, dík. Ale nemá náhodou XFS větší výchozí blok? Mám pocit že implicitně má 4kb s možností automatického zvětšování (http://en.wikipedia.org/wiki/Xfs#Variable_block_sizes). To by mohlo být pro relační databázi o mnoho výhodnější (zejména pro B-stromy). Implicitní 1kb pro extX systémy to je žalostně málo.

    Rozhodně by bylo zajímavé vědět, jaký bude rozdíl s nastavením 8kb bloků pro všechny FS. Zase by zřejmě vyhrál XFS, ale asi by to nebylo tak markantní.

    • Heron napsal:

      XFS má výchozí velikost 4kB stejně jako výchozí nastavení ext3. Takže tady nebyl XFS zvýhodněn.

      Při vytváření FS lze velikost bloku samozřejmě zvolit, extX má ještě na výběr předvolené typy FS (mkfs.ext3 -T). Ty jsou definovány v souboru /etc/mke2fs.conf. Menší než výchozí 4kB velikost bloku se nastavuje pouze pro small a floppy.

      [defaults]
      base_features = sparse_super,filetype,resize_inode,dir_index
      blocksize = 4096
      inode_ratio = 8192

      [fs_types]
      small = {
      blocksize = 1024
      inode_ratio = 4096
      }
      floppy = {
      blocksize = 1024
      }
      news = {
      inode_ratio = 4096
      }
      largefile = {
      inode_ratio = 1048576
      }
      largefile4 = {
      inode_ratio = 4194304
      }

  2. stewe napsal:

    zdravim, vyskusal som presne parametre aj postup pri testovani a celkom ma prekvapilo, ze pri ext4 mam cca 545 tps ako to je mozne? :) Tu vypisujem vystup z pgbench

    [508] ^_^ [root@poseidon:~]# pgbench -h /Data/DB/PostgreSQL/test/sock/ -p 5434 -U postgres -i -s 32
    [509] ^_^ [root@poseidon:~]# pgbench -h /Data/DB/PostgreSQL/test/sock/ -p 5434 -U postgres -c 32 -M prepared -t 1000
    starting vacuum...end.
    transaction type: TPC-B (sort of)
    scaling factor: 32
    query mode: prepared
    number of clients: 32
    number of transactions per client: 1000
    number of transactions actually processed: 32000/32000
    tps = 545.050456 (including connections establishing)
    tps = 545.536819 (excluding connections establishing)

    tu je vypis z mount

    [532] ^_^ [root@poseidon:/Data/DB/PostgreSQL]# mount
    /dev/root on / type ext4 (rw,relatime,barrier=1,data=ordered)
    proc on /proc type proc (rw)
    sysfs on /sys type sysfs (rw)
    usbfs on /proc/bus/usb type usbfs (rw)
    /dev/sda3 on /Data1 type ext4 (rw)
    /dev/sda4 on /Data2 type ext4 (rw)
    tmpfs on /dev/shm type tmpfs (rw)

    /Data je na particii / cize parametre rw,relatime, barrier=1,data=ordered … robim nieco zle, ked nemam priblizne vysledky 100 tsp ako vy, alebo je to ok? V tom pripade, ako by som z toho mohol vytrieskat este viac ? :)

    Dakujem za rady

    • stewe napsal:

      podotykam ze v serveri je hardverovy raid, 4GB ram a uname -a pise

      Linux poseidon 2.6.35.10-1.0-2 #7 SMP Tue Feb 8 04:26:35 CET 2011 i686 Intel(R) Core(TM)2 CPU 6600 @ 2.40GHz GenuineIntel GNU/Linux


      [546] ^_^ [root@poseidon:/Data/DB/PostgreSQL]# df -h
      Filesystem Size Used Avail Use% Mounted on
      /dev/root 19G 17G 1.9G 90% /
      /dev/sda3 470G 174G 273G 39% /Data1
      /dev/sda4 1.4T 987G 288G 78% /Data2
      tmpfs 1.5G 0 1.5G 0% /dev/shm

      Databaza je na /dev/root

      Su tieto vysledky „v pohode“ ? :)

    • Heron napsal:

      Zdravím také.

      Tvůj postup i výsledky jsou v pořádku (čísla odpovídají danému HW). EXT4 je u mě (na CentOS 5) nějaká divná, obecně by měla být +- na stejné úrovni jako ext3, případně rychlejší. Což není.

      Jak jsem psal v článku:

      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.

      Ještě pro vysvětlení, CentOS 5.5 má oficiálně jen jeden FS (ext3) a neoficiálně i XFS. Cokoliv dalšího je tam dodáno „bokem“ (jádro CentOSPlus) a podle toho to taky vypadá. CentOS5 má jádro 2.6.18.

    • Heron napsal:

      V tom pripade, ako by som z toho mohol vytrieskat este viac ?

      Píši seriál pro LinuxExpres o optimalizaci PostgreSQL DB, bude vycházet každých 14 dnů. Tam se můžeš dočíst více.

      • stewe napsal:

        prave cez ten clanok som sa dostal na tuto stranku :) cakam na dalsie vyborne clanky :)

Komentáře nejsou povoleny.