Výsledky benchmarku / HDD + read-write pgbench

Minule jsem se zabýval výsledky read-only pgbench běhů, tentokrát je tak na řadě read-write zátěž. Průměrná hodnota tps přes všechny souborové systémy vypadá se zapnutými write bariérami takto

průměrný výkon s read-write zátěží a zapnutými write bariérami

Z obrázku je vidět že stejně jako v případě read-only zátěže platí že vyššího výkonu je dosahováno spíše s menšími databázovými bloky, a i tentokrát mezi 1kB a 32kB bloky cca 30%.

Write bariéry umožňují využití diskové cache (resp. cache nezálohované baterií obecně) bez rizika nebezpečného poškození souborového systému. Podporuje-li to souborový systém a používáte-li zálohovanou cache (např. akumulátorem), můžete write bariéry bez obav vypnout - získáte tak výrazně vyšší výkon, jak je vidět z tohoto obrázku

průměrný výkon s read-write zátěží a vypnutými write bariérami

Je zřejmé že zejména pro menší databázové bloky je zisk oproti výkonu se zapnutými write bariérami značný (až 100%), a to byla použita jen velmi malá cache (32MB přímo na disku). Současně se výrazně zvětšil rozdíl mezi malými a velkými databázovými bloky.

I z výše uvedených obrázků je zřejmá určitá anomálie v levém horním rohu, kdy se tři kombinace velikostí bloků chovají výrazně jinak. Zajímavé je že s využitím write bariér je chování přesně opačné než když použity nejsou. Například u souborového systému ext3-ordered se zapnutými write bariérami je chování takového

chování ext4-ordered se zapnutými write bariérami

tj. výkon v levém horním rohu (mírně) klesá, zatímco v případě jejich vypnutí je chování takovéto

chování ext4-ordered s vypnutými write bariérami

tj. výkon v levém horním rohu velmi výrazně roste. Toto chování vykazují všechny varianty souborových systémů ext3 a ext4, byť v "journal" módu se zapnutými write bariérami je pokles téměř neznatelný

chování ext4-journal se zapnutými write bariérami

Podobně se ale při vypnutých write bariérách chová např. i XFS

chování XFS s vypnutými write bariérami

Úspěšnost databázové cache

Podíváme-li se na úspěšnost databázové cache, tj. procento databázových bloků nalezených v shared buffers (tj. bez nutnosti načítat je z disků) je velmi vysoká - dokonce výrazně vyšší než v případě read-only zátěže, kde se pohybovala mezi 60% a 70%.

úspěšnost databázové cache (shared buffers)

Stejně jako v případě read-only zátěže je maximální úspěšnosti dosahováno pro 2kB bloky, závislost na velikosti databázového bloku je ale výrazně nižší - hodnoty se pobyvují zhruba v intervalu 2% (u read-only zátěže byl interval cca 10%).

Průběh tps

Zatímco u read-only zátěže se pro jednotlivé souborové systémy průběh TPS během benchmarku nijak výrazně nelišil, v případě read-write zátěže se chvání jednotlivých souborových systémů poměrně výrazně liší. Podívejme se tedy podrobněji na jednotlivé souborové systémy - pro základní srovnání byla zvolena standardní kombinace bloků (4kB pro souborový systém, 8kB pro databázi).

Je zajímavé sledovat zejména několik základních věcí

  • Jak se souborový systém chová v okamžiku kdy běží checkpoint?
  • Jak se souborový systém chová v okamžiku kdy neběží checkpoint?
  • Je výkon stabilní nebo výrazně fluktuuje?

Všechny obrázky jsou pro případ se zapnutými write bariérami - pokud vás zajímají výsledky s vypnutými bariérami, najdete je tady.

Ext2

V případě "tradičního" linuxového souborového systému je chování poměrně nepříznivé, tj. v okamžiku checkpointu dochází k velmi znatelnému poklesu výkonu (ze 150 na necelých 20 tps)

ext2 se 4kB fs bloky a 8kB databázovými bloky

přitom ale pro jiné velikosti bloků je chování výrazně příznivější - například pro 16kB databázové bloky je chování takovéto

ext2 se 4kB fs bloky a 16kB databázovými bloky

tj. výkon sice výrazně fluktuuje okolo 90 tps, nedochází však k natolik brutálnímu poklesu jako u 8kB bloků. Zajímavé také je že k fluktuaci dochází již před zahájením checkpointu a přetrvává i po jeho skončení ...

ext3

V případě ext3 (a také ext4) je třeba brát v potaz také žurnálovací mód. Pokud je zvolen nejnižší mód (data=writeback), graf vypadá takto

ext3 writeback se 4kB fs bloky a 8kB databázovými bloky

přičemž při zapnutí žurnálování (data=ordered) se sice nezmění chování mimo checkpoint (tps zůstává zhruba na hodnotě 120), během checkpointu je ale znatelný pokles výkonu (a vyšší rozptyl transakcí).

ext3 ordered se 4kB fs bloky a 8kB databázovými bloky

No a konečně při zapnutí plného žurnálování (data=journal) poklesne tps ze 120 na 80, a současně dochází k výraznějším výkyvům během checkpointu.

ext3 journal se 4kB fs bloky a 8kB databázovými bloky

Obecně se ale dá říci že mne chování ext3 příjemně překvapilo - čekal jsem horší.

ext4

Souborový systém ext4 je víceméně potomek ext3, vylepšující např. chování během checkpointu a využití write bariér. Má tedy stejné módy žurnálování - "data=writeback" se chová téměř stejně jako u ext3 (ale dosahuje mírně lepších výsledků)

ext4 writeback se 4kB fs bloky a 8kB databázovými bloky

zatímco "ordered" je ve srovnání s ext3 výrazně plynulejší (v podstatě se rovná "writeback" módu ext4)

ext4 ordered se 4kB fs bloky a 8kB databázovými bloky

V módu "journal" se chování v podstatě přesně shoduje s ext3, i když je o trochu učesanější.

ext4 journal se 4kB fs bloky a 8kB databázovými bloky

Takže ano, vypadá to že ext4 je krok správným směrem, byť relativně malý.

XFS

Souborový systém XFS je od začátku navržen jako žurnálovací (tj. nejedná se o hybrid jako souborové systémy z "ext" rodiny). Uplatňovaná omezení jsou ale spíše slabší a srovnatelná s "writeback" módem ext3/ext4. Chování XFS vypadá takto:

xfs se 4kB fs bloky a 8kB databázovými bloky

Je zřejmé že dosahuje o něco nižšího výkonu než ext3/ext4 (cca 100 tps oproti 130 tps) a to samé platí pro "ordered" mód. Ale když běží checkpoint, je chování daleko lepší (vyšší výkon, menší kolísání). Při srovnání s ext4-journal je xfs o něco rychlejší i v době kdy checkpoint neběží (asi 100 tps oproti 80 tps).

Poznámka: Původní srovnání s ext4-journal a závěry byly poněkud matoucí, na což poukázal intgr (viz. komentář pod anglickou verzí článku).

jfs

Dalším "nativně žurnálovacím" souborovým systémem je JFS, nemá ale takovou podporu ani aktivní vývoj. Výkon v době kdy neprobíhá checkpoint vypadá velmi zajímavě (140 tps je výrazně vyšší než hodnota 100 tps dosažená u XFS), ale v době checkpointu je znatelný značný pokles výkonu:

jfs se 4kB fs bloky a 8kB databázovými bloky

Chování v době checkpointu ale výrazně závisí na velikosti databázového bloku - např. po snížení na 4kB se chování změní takto:

jfs se 4kB fs bloky a 4kB databázovými bloky

I tak se ale jedná o velmi špatné chování - fluktuace výkonu je velmi výrazná, zejména ve srovnání s chováním XFS a ext3/ext4.

ReiserFS

Chování ReiserFS je poměrně zajímavé a do jisté míry ho lze srovnat s ext4 a xfs - výkonem se blíží xfs ale kolísáním v době checkpointu spíše ext3/ext4.

reiserfs se 4kB fs bloky a 8kB databázovými bloky

Tím jsem vyčerpal "tradiční" souborové systémy a na řadu přicházejí dva souborové systémy označené jako "experimentální" - btrfs a nilfs2.

btrfs

Btrfs má dva základní módy, podle toho zda se používá "copy-on-write" - nejdříve se podívejme na případ kdy se copy-on-write nepoužívá, tj. případ kdy btrfs připomíná standardní souborové systémy

btrfs-nodatacow se 4kB fs bloky a 8kB databázovými bloky

Toto chování velmi připomíná chování ext4-journal, a to jak chováním mimo checkpoint tak během něj. Podíváme-li se ale na chování se zapnutým "copy-on-write," čeká nás překvapení
btrfs-datacow se 4kB fs bloky a 8kB databázovými bloky

nejen že se nijak nesnížil výkon, výrazně se zlepšilo chování během checkpointu, a to tak že se v podstatě neliší od výkonu mimo něj. Neptejte se mne jak to v Oracle udělali ...

nilfs2

Druhým experimentálním "log-based" souborovým systémem (společně s btrfs) je nilfs2, vyvíjený NTT. A stejně jako u btrfs to vypadá více než zajímavě:

nilfs2 se 4kB fs bloky a 8kB databázovými bloky

Chování sice není tak vyrovnané jako u btrfs, ale i zde je zřetelné velmi positivní chování během checkpointu. Na začátku má dokonce výrazně lepší výkon než btrfs a pokud se vývojářům v NTT podaří odstranit postupný pokles, bude to velmi zajímavá možnost.

Každopádně potenciál tu je, protože pro menší databázové bloky je chování výrazně lepší - například pro 1kB bloky vypadá takto

nilfs2 se 4kB fs bloky a 1kB databázovými bloky

což vypadá velmi slibně. Svou roli ale nepochybně sehrává také nastavení background writeru, která v případě 1kB bloků vlastně zapisuje 8x méně dat než v případě 8kB bloků.

Překvapení

Prvním překvapením je, stejně jako u read-only zátěže, že nodatacow varianta btrfs (tj. s vypnutým copy-on-write) je pomalejší - opět sice ne příliš, ale je.

btrfs se zapnutými write bariérami

btrfs-nodatacow se zapnutými write bariérami

Skutečná výhoda nodatacow se projevuje pouze v případě vypnutých write bariér, kde je nodatacow varianta skutečně výrazně rychlejší

btrfs s vypnutými write bariérami

btrfs-nodatacow s vypnutými write bariérami

Závěr

Na závěr si (stejně jako u read-only zátěže) dovolím uvést několik jednoduchých pravidel

  • Nemá smysl používat malé velikosti bloku souborového systému - blok 4kB nemusí znamenat lepší výkon (např. u ext4-ordered), v podstatě nikdy ale znatelně výkon nesnižuje.
  • V případě zapnutých write bariér je optimální velikost databázového bloku 4kB  (resp. je shodná se zvolenou velikostí bloku souborového systému), ale rozdíly při změně velikosti bloku jsou relativně malé.
  • S vypnutými write bariérami je optimální velikost databázového bloku okolo 2kB a s rostoucí velikostí databázového postupně klesá. Na rozdíl od read-only zátěže ale k hlavnímu poklesu výkonu nedochází mezi 8kB a 16kB bloky, ale již mezi 2kB a 4kB.
  • Ext4 a XFS jsou dobrou volbou mezi stabilními souborovými systémy. Velmi slibně ale vypadají také oba experimentální souborové systémy - btrfs a nilfs2.

Komentáře

K tomuto článku zatím žádné komentáře neexistují (nebo čekají na schválení).

Nový komentář

Všechny komentáře podléhají schválení - mezi odesláním komentáře a jeho zobrazením na této stránce tedy může být prodleva. Vyplníte-li e-mailovou adresu, budete o schválení či neschválení komentáře informováni.

V titulku ani v textu nejsou povoleny HTML tagy - budou automaticky odstraněny. Odstavec ukončíte prázdným řádkem.

(nepovinné)