Gyorsan szeretném folytatni a tesztelést, nehogy sokat kelljen várnotok az eredményekre... :) Sajnos ennek kicsit ellent vágott az, hogy véletlenül letöröltem azt a fájlt, amibe a következtetéseimet írtam le... de próbálom összeszedni magam, meg pár diagramot is. A .ods táblát az eredményekkel szívesen feltenném ide, de nem hiszem hogy van rá lehetőség sajnos... mindegy, kitalálok valamit. És akkor úgy lehet rendezni az eredményeket, ahogy akarjátok.
Addig is itt az első rész, amelyben a teszt módszertant és a használt szkriptjeimet írtam le.
Most pedig lássunk végre valamit! A három említett (kis file) teszt átlaga képekben:
(Kattints a képre a nagyobb mérethez)
Nem meglepő, hogy a bzip2 a legjobb; de az már meglepő, hogy nem igazán sokkal. Kis, 200-400Mb esetén még elér 10-15%-kal többet, de 800Mb felett már csak 2-5% a plusz "teljesítménye" - ez még jobban ki fog csúcsosodni akkor, amikor a betömörítési időket vizsgáljuk. Érdekes megfigyelni, hogy 400Mb - 1G között van egy érdekes kicsúcsosodás a diagramon. Ha külön vizsgáljuk a normál, random és zerofill fájlokat, akkor látjuk, hogy ez a kicsúcsosodás csak és kizárólag normál fájlok esetén jön létre (a random és zerofill fájlok tömörítési aránya mindig ugyanannyi volt, mivel az entrópia is végig ugyanaz volt). Szóval, ebben a 400Mb - 1Gb tartományban hétköznapi fájlokat kicsit rosszabbul tömörít mindegyik algoritmus. Vajon miért, amikor talán ez a leggyakoribb felhasználási területük?
(Kattintásra megnyílik teljes méretben)
Kivirul a fenti diagramból, hogy a bzip2 időigénye lineárisan nő a többi algoritmushoz képest. Vessük össze az előzőekkel: 2Gb tömörítése esetén a bzip2 több, mint kétszer annyi időt igényel a tömörítésre, és csak 2-3%-nyival kisebbre tömöríti a fájlokat. Egy gigabájtnyi adatocska tömörítése is másfélszer annyi malmozásunkba kerül, mint a többiekkel, és még mindig csak 2-3% felhasználható fájlterület a nyereség. Kétszáz megánál talán az a 15% megéri a hatszoros (!) időt, mivel másodpercben kifejezve az nem sok, 5:20 a gzip 57 másodpercéhez képest (miközben a ZIP-nek 1:55 kellett ugyanerre a mutatványra).
(Kattintásra megnő)
A tar-ral illetve tar nélkül történő archívum tesztelés eredményét azért nem teszem ide, mert unalmas; alakjában ugyanaz mint a fentebb látható "Egy fájl kitömörítése", és ráadásul az idők sem változnak nagyon - egyetlen tanulság, hogy ha bzip2-vel vagy gzippel tesztelünk egy archívumot, az körülbelül 10-12%-kal gyorsabb, mintha a "tar -tjf" és "tar -tzf" parancsot használnánk - na ugye, mondtam hogy unalmas! Ami viszont igen érdekes, hogy a ZIP önmagában a kicsomagolást lényegében azonnal megcsinálja, nem kell sokáig tűnődnie a feladat végrehajtásán, és ez független az archívum méretétől. Látható, hogy ha a ZIP-et a tar-ral karöltve használjuk, máris mutatkozik a "szalag archívum" "jótékony" hatása, azaz a fájlt végig kell olvasni a kicsomagoláshoz. A bzip2-nek 2Gb körül tízszeres időre van szüksége a gzip-hez (és a zip+tar-hoz) képest, és tízezerszeresre a ZIP-hez képest (oké ez csak elméleti dolog - nyilván a ZIP belső szerkezete jobb ehhez a feladathoz).
Elkészítettem minden egyes tömörítőre a különféle feladatokban leadott teljesítmények összehasonlító diagramjait is. Ezek után nem nézve az értékeket, csak a vonalak alakját, érdekes felfedezéseket tehetünk a diagramokat egymás mellé téve:
A bzip2-nek a legnagyobb fejfájást pont a teljesen nullákkal feltöltött fájl okozta, míg a gzip/zip azt abszolválta leggyorsabban. Ugyanakkor mindkét algoritmus szinte századrészére tömörítette be (amúgy nagyon helyesen) ezeket a fájlokat. A random fájloknál pont fordítva volt a helyzet: ezek szerint a bzip2 hamar felismerte hogy ez random, a többiek lassabban tanulták meg.
A gzip nyújtotta a legegyenletesebb teljesítményt - nagyon közel vannak egymáshoz a vonalak, minden feladatnál egyformán kemény volt, mint beton.
Amíg a tar is beleszól a listázás/kitömörítés lépésébe, addig az archívum nagyságával egyenes arányban nő a kitömörítési idő. A zipnél ilyen nincs, két tized másodperc volt a legtöbb idő, amit ilyen csacsiságokkal eltöltött.
Sok kis fájl esetén a következtetéseim:
- A bzip2 nekem egyértelműen nem alternatíva: lassú a betömörítés, rémesen lassú a kitömörítés és a tömörítési arányban mért nyereség alig pár százalék.
- A gzip elég frankó, de mivel nem tud könyvtárat becsomagolni, muszáj a tar-t használni, ami erősen meglátszik kitömörítéskor. Ugyan nem teszteltem archívumból törlést, archívumba hozzáadást, mert ez nekem most nem volt fókuszban, de úgy képzelem, a tar miatt az is hasonló eredményt adna.
- Ha a mentést azért készítem, hogy egyszer betömörítem, és később az egészet kell kitömöríteni, akkor a GZIP a nyertes, mivel kicsit gyorsabb, mint a ZIP és picit (1%-kal) jobban is tömörít. Ez jó lehet mondjuk egy nagy rendszer elmentésekor, amit egyben kell visszaállítani.
- Ha a mentésnél már tudom, hogy a fájlokból többször szeretnék visszaállítani, akkor mindenképpen a ZIP-et fogom választani. Egyelőre jól vizsgázott, bejött amit gondoltam!
Nemsokára jövök majd a nagyfájl-teszttel (csak még kitalálom, hogy is csináljam... :-)).