Pigz - paralelní implementace gzip

Dnešní moderní procesory mají obvykle více jader. To umožňuje lepší běh více procesů současně, nebo rychlejší běh i jedné aplikace, pokud více jader umí použít. Standarní gzip mezi takové aplikace nepatří, ale existuje implementace pigz, která si klade za cíl prováďět stejnou úlohu ve více threadech.

Pokusil jsem se prakticky rychlost pigz vs. gzip porovnat.

Měřil jsem na dvou výkonově odlišných systémech s procesory Intel. Jeden stroj byl dvouprocesorový server s celkem 12 jádry, díky technologii hyperthreading se tváří jako 24 jádrový. Druhý stroj je obyčejný spotřební notebook s dvoujádrem. S parametry obou měřených programů jsem nehýbal, pouze jsem volil metodu komprese - změřil jsem zvlášť nejrychlejší a nejlepší. Testy jsem udělal na dvou souborech obsahujících data odlišného charakteru - textová a binární. Program pigz umožňuje parametrem zvolit počet vláken, ale nechal jsem výchozí volbu, kdy si sám nastaví vlákna podle počtu nadetekovaných jader.

Benchmark

1) dvouprocesorový server

Dell PowerEdge R620 - 2x Intel Xeon E5-2630L - celkem 12 jader (24 HT jader), 64GB RAM, mechanické SAS disky 15k otáček, Debian, kernel 2.6.32

Textová data

dump SQL databáze, nezkomprimovaná velikost 52GB

fast metoda (-1) výsl. 7.8GB best metoda (-9) výsl. 6.5GB
gzippigzgzippigz
čas komprese690s
(cpu 98%)
350s
(cpu 488%)
5215s
(cpu 99%)
414s
(cpu 2058%)
čas dekomprese390s
(cpu 99%)
319s
(cpu 143%)
360s
(cpu 99%)
334s
(cpu 131%)

Binární data

hůře komprimovatelný binární soubor, velikost 10GB

fast metoda (-1) výsl. 9.3GB best metoda (-9) výsl. 9.2GB
gzippigzgzippigz
čas komprese422s
(cpu 99%)
89s
(cpu 1532%)
709s
(cpu 99%)
71s
(cpu 1704%)
čas dekomprese94s
(cpu 99%)
69s
(cpu 115%)
92s
(cpu 99%)
68s
(cpu 114%)

2) osobní počítač (notebook)

Dell Latitude E6410 - 1x Intel Core i5 M560 - celkem 2 jádra (4 HT jádra), 4GB RAM, SATA SSD disk, Gentoo Linux + běžící GNOME3, kernel 3.6.0

Textová data

log http serveru, velikost 2.9GB

fast metoda (-1) výsl. 580MB best metoda (-9) výsl. 463MB
gzippigzgzippigz
čas komprese50s
(cpu 85%)
30s
(cpu 259%)
111s
(cpu 93%)
56s
(cpu 236%)
čas dekomprese63s
(cpu 30%)
47s
(cpu 35%)
64s
(cpu 28%)
47s
(cpu 33%)

Binární data

disk image Windows (dynamický) z VirtualBoxu, velikost 6.6GB

fast metoda (-1) výsl. 3.4GB best metoda (-9) výsl. 3.2GB
gzippigzgzippigz
čas komprese238s
(cpu 80%)
143s
(cpu 238%)
735s
(cpu 94%)
335s
(cpu 332%)
čas dekomprese155s
(cpu 45%)
129s
(cpu 41%)
156s
(cpu 41%)
130s
(cpu 43%)

Pozn.: Na notebooku běželo GNOME3, takže podmínky měření nebyly úplně laboratorní. Chybu měření odhaduji max. do 10%.

Závěr

Benchmarkem bylo potvrzeno, že ve všech případech byl pigz rychlejší nežli gzip. U komprese je rozdíl větší než u dekomprese a čím více jader, tím je rozdíl markatnější. U best metody může být komprimace na mnohojádrovém stroji i o řád rychlejší, na obyčejném dvoujádrovém notebooku zhruba dvojnásobná. Je vidět, že u dekomprese není nárust rychlosti tolik výrazný (desítky procent) a nezáleží ani tolik na počtu jader.

Údaj cpu znamená množství procesorového času, které si vzala úloha (100% = jedno plně vytížené jádro). Měřeno utilitou time.

Pigz bývá zařazen v repozitářích distribucí, např. v Debianu apt-get install pigz.


Václav Vinklát 1.2.2013

TOPlist