Hlavní navigace

Porovnání gzip, bz2, xz a zstd ve všech stupních komprese

8. 2. 2019 17:57 (aktualizováno) x14

Zajímalo mě, jak se chová zstd v porovnání s dalšími běžně používanými kompresory. Udělal jsem si skript a ten provedl „pár“ testů, a když jsem si uvědomil, kolik to sežralo elektřiny, tak jsem se rozhodl, že to alespoň publikuji :-)

  • byly použity tyto verze kompresorů: gzip 1.6, bzip2 1.0.6, xz 5.2.2, zstd 1.3.3
  • Intel Core i7–6700 @ 3.40GHz (4×2 jádra, komprese na jednom jádře), 16 GB RAM
  • komprese připraveného tar souboru uloženého na SSD byla prováděna přímo kompresorem do souboru na klasickém disku
  • tři sady dat: můj home (plný nekomprimovatelných věcí, programů, zdrojáků – prostě bordel), aktuální /usr a zdrojáky jádra Linuxu stažené z kernel.org
  • svislá osa grafů: uspořené místo v procentech původní velikosti (méně je lépe)
  • vodorovná osa grafů: potřebný čas (méně je lépe)

Parametry komprese

Při testu byl použit pouze číselný parametr síly komprese -#. U každého programu byl použit celý rozsah (toto doma nezkoušejte :-). Číslo uprostřed intervalu je výchozí hodnota, tuto nejspíš automaticky použije naprostá většina lidí. V grafu je označena jako černý bod.

  • gzip:   1–6–9 (výborně vybraná výchozí hodnota, pěkně „za kopcem“ :-)
  • bzip2: 1–9–9 (zde tato hodnota téměř neovlivňuje dobu komprese, jen použitou paměť)
  • xz:      0–6–9 (zajímavost: hodnota 0 byla programátory nastavena tak, aby vždy fungovala lépe než ‚gzip –9‘)
  • zstd:   1–3–19 (s tou trojkou mohli možná trochu přitlačit…; existuje parametr –ultra, který povolí hodnoty až 22)

Poznámka na konec

Doporučuji jednoznačně používat standardní přípony. Pak bude v GNU tar fungovat automatika a stačí psát: tar cavf, tar xavf

  • gzip: .tar.gz, .tgz,
  • bzip2: .tar.bz2, .tz2, .tbz2, .tbz
  • xz: .tar.xz, .txz
  • zstd: .tar.zst, .tzst (automatika funguje až od verze GNU taru 1.31, jinak je potřeba psát tar -I zstd -cvf )

Závěr

Pokud jde o kvalitu komprese, tak gzip a bzip2 jsou téměř mimo hru. Doporučuji povšimnout si, v jakém čase zstd vygeneruje podobně velký archiv. Pro bzip2 bude toto v budoucnosti nejspíše konečná. (Možno doporučit snad jen ke studiu BWT, to je velice fikaný nápad.) Kompresor gzip je na tom určitě o dost lépe, ten tu bude ještě hodně dlouho – hraje pro něj zpětná kompatibilita (je úplně všude) a vystačí si minimem paměti.

Další dva moderní kompresory se rozcházejí v záměrech: zstd cílí na maximální rychlost, xz na maximální kompresi (to ostatně naznačují už výchozí hodnoty komprese: zstd 1-3-19, xz 0-6-9). Tam, kde se tyto dva kompresory potkávají, jde o moc pěkný souboj. Teď už si musí každý zvážit, jestli mu ty jednotky ušetřených procent (které ale zase mohou dělat několik klíčových giga) u xz stojí za ten čas. Upozorňuji, že první dva grafy mají čas v minutách! Snad se to může vyplatit u distribuce velkých dat, ukládání „věčných“ archivů nebo limitních situací…

Pro takové to domácí pakování je pro mě vítězem jednoznačně zstd.