Program RZIP vytvořil Andrew Tridgel, který je také autorem či spoluautorem známých programů jako samba, rsync, ccache, tdb. Jeho cílem bylo vytvořit komprimační program vhodný pro kompresi distribučních tarballů.
Jak pracuje komprimační program
Komprimační programy pracují zhruba takto:
- načítají vstupní data do bufferu (obvykle cyklického)
- v bufferu se různými způsoby snaží vyhledat podobné posloupnosti dat
- výstupní data jsou kódována pomocí odkazů na data v bufferu
Stupeň dosažené komprese závisí kromě efektivity vyhledávacích a kódovacích algoritmů také na velikosti bufferu. Čím je buffer větší, tím je tu větší šance, že v něm najdeme data podobná těm, která se snažíme zakódovat. Nejlepší by bylo, kdyby byl buffer stejně velký jako vstupní data. Nemohlo by se tak stát, že bychom zakódovali data na výstupu neefektivně jen proto, že nám podobná data již z bufferu zmizela.
Co je na rzipu zajímavého
V praxi se ovšem takto veliký buffer nepoužívá. Zabíral by příliš mnoho paměti a jeho prohledávání by trvalo příliš dlouho. Velikost bufferu je proto kompromisem mezi CPU a paměťovou náročností a stupněm dosažené komprese. Program gzip používá buffer o velikosti 32 kB, program bzip2 900 kB, programy Ace a Rar používají až 4 MB. Nejzajímavější na rzipu je, že jeho buffer je veliký ne 900 kB nebo 4 MB, ale celých 900 MB. Druhá zajímavá věc na rzipu je, že používá bzip2 knihovnu jako svůj komprimační backend. Zjednodušeně řečeno, rzip je preprocesor pro bzip2.
Instalace
RZIP 2.0 je k dispozici na rzip.samba.org a je šířen pod GPL licencí. Rzip je neuvěřitelně malý, pouhých 40 kB, a neuvěřitelně jednoduchý. Jak již bylo napsáno, vyžaduje ke své kompilaci a činnosti knihovnu libbz2. Příkazová řádka rzipu je téměř shodná s bzipem 2. Rzip však na rozdíl od bzipu neumí komprimovat data z roury, což snižuje jeho praktickou využitelnost při komprimování záloh.
Provedl jsem testy gzipu, rzipu 2, bzipu2 a raru 3.30. Zajímala mne rychlost komprese, spotřeba paměti a výsledná velikost.
Test č.1
Testování probíhalo na Postgresql-7.4.1-base tarballu o nekomprimované velikosti 36 444 160 B.
bzip2
přepínač | paměť | čas | výsledná velikost |
---|---|---|---|
–2 | 2560K | 83.34s | 6792414 |
–6 | 5696K | 95.16s | 6469659 |
–9 | 7172K | 94.28s | 6407883 default |
dekomprese | 4256K | 25.26s | – |
gzip
Spotřeba paměti je téměř konstantní – 888 K.
přepínač | čas | velikost |
---|---|---|
–1 | 12.32s | 9977624 |
–2 | 13.46s | 9628126 |
–3 | 17.00s | 9359419 |
–4 | 17.69s | 8810134 |
–5 | 24.12s | 8366616 |
–6 | 38.67s | 8238771 default |
–7 | 46.46s | 8200544 |
–8 | 117.09s | 8171834 |
–9 | 153.93s | 8165282 |
dekomprese | 3.33 | – |
rzip
přepínač | paměť | čas | velikost |
---|---|---|---|
–1 | 39540K | 75.19s | 6290904 |
–2 | 43384K | 72.59s | 5992169 |
–3 | 49272K | 71.67s | 5948152 |
–4 | 59244K | 71.48s | 5929648 |
–5 | 77152K | 71.94s | 5903737 |
–6 | 77432K | 88.21s | 5905714 default |
–7 | 101235K | 133.52s | 5926667 |
–8 | 102354K | 166.02s | 5916665 |
–9 | 101267K | 271.77s | 5914410 |
dekomprese | 3268K | 24.05s | – |
rar 3.30
Dictionary 1024K
-m2 | 9036K | 55.73s | 6363615 |
-m3 | 9036K | 90.58s | 6162404 |
-m4 | 29568K | 89.55s | 5563316 |
-m5 | 34696K | 101.89s | 5483564 |
dekomprese | 25508K | 55.38s | – |
Dictionary 4096K
-m2 | 31640K | 55.63s | 5962677 |
-m3 | 31640K | 90.88s | 5732056 |
-m4 | 42576K | 90.17s | 5374120 |
-m5 | 57268K | 102.65s | 5297411 |
dekomprese | 25416K | 53.47s | – |
Test ukázal několik věcí:
- překvapilo mne, že gzip –9 je pomalejší než bzip2
- pokud máme dostatek paměti, nevyplatí se u bzip2 se používat přepínače pro nižší stupeň komprese
- rar3 je výborný komprimační program. Jeho výsledek překvapil i autora rzipu. Jak se říká: Pokud chceš vědět, co je nejlepší komprimační program, podívej se, čím je komprimován warez.
- u gzipu se vyplatí používat –4 místo –3 ve známém: cvs -z4 up -dP
- u rzipu je lepší používat –5 místo defaultního –6 (v man stránce je chybně uvedeno –9)
- rzip používá pro kompresi 10× více paměti než bzip2
- rzip má rychlost komprese i dekomprese srovnatelnou s bzip2
- rzip a bzip2 mají při dekompresi srovnatelné paměťové nároky
Test č. 2
Dump root FreeBSD 5.2.1 partition. Tato partition obsahuje kromě základních programů pro start systému také tři kernely včetně modulů po 17 MB. Kernely a moduly jsou téměř shodné, takže zde by se mohl rzip hezky uplatnit. Nekomprimovaná velikost dumpu je 123 852 800 B.
program | usertime | paměť | výsledná velikost |
---|---|---|---|
gzip -best | 717.288 | 840k | 47415096 |
bzip2 –9 | 312.495 | 9612k | 41893262 |
rzip –1 | 201.779 | 4364k | 28341759 |
rzip –2 | 153.614 | 9295k | 21431814 |
rzip –3 | 151.739 | 16871k | 20801606 |
rzip –4 | 150.512 | 29583k | 20447342 |
rzip –5 | 144.712 | 53301k | 20304598 |
rzip –6 | 166.387 | 51977k | 20034607 |
rzip –7 | 203.156 | 92153k | 19745495 |
rzip –8 | 218.228 | 92058k | 19733289 |
rzip –9 | 278.718 | 58896k | 19720461 |
rar -m5 -md4096 | 562.589 | 38208k | 29331514 |
rar -m4 -md4096 | 442.136 | 35768k | 29372091 |
rar -m3 -md4096 | 362.993 | 31540k | 30008857 |
Podle očekávání se zde rzip opravdu hezky vytáhl. Dost mne překvapil i výborný výsledek raru oproti bzip2. Opět se ukázalo, že u rzipu je volba –5 optimální.
Závěr
Dva jednoduché testy ukázaly, že se použití programu rzip rozhodně vyplatí. Jeho paměťová náročnost při komprimaci je sice o řád vyšší než je tomu u bzipu, ale v praxi je mnohem důležitější dekomprese, a tam jsou nároky rzip i bzip2 srovnatelné. Navíc i doba komprese je u rzipu a bzip2 podobná. Doporučoval bych tedy přejít u tarballů z .bz2 na .rz. Podle mého názoru má rozhodně rzip na to, aby postupně nahradil bzip2.