HTML

Bagoj úr blogja

Kíváncsi Bagoj befigyel a Linux belsejébe, illetve különféle Linux terjesztéseket próbál ki. Ha jó napja van, scriptet ír Neked.

Friss topikok

Nagy tömörítőteszt (2): ZIP vs .tar.gz vs .tar.bz2

2009.01.05. 12:05 bagoj ur

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:

Tömörítési arány a tömörítendő fájlok mennyisége alapján, 200Mb-tól 2Gb-ig

(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?

Tömörítési idők a tömörítendő fájlok mennyisége alapján, 200Mb-tól 2Gb-ig

(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).

Kicsomagolás ideje a tömörítendő fájlok mennyisége alapján, 200Mb-tól 2Gb-ig

(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).

Bzip2 teljesítmény különféle alkalmazási területen

ZIP teljesítmény különféle alkalmazási területen

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.

Gzip teljesítmény különféle alkalmazási területen

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... :-)).

7 komment

Címkék: linux opensource alkalmazások tömörítő zip gzip bzip2

A bejegyzés trackback címe:

https://bagojur.blog.hu/api/trackback/id/tr35857429

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

charlie 2009.06.21. 10:18:03

ÉS a RAR? az is elég jól tömörít. Igaz, nincs nyílt forráskódú verziója.

zoltanh721 2009.06.30. 09:01:48

Én inkább a TXZ fájltípusra lennék kíváncsi, ami ha jól emlékszem LZMA-s gyökerei vannak...

bagoj ur 2009.06.30. 14:13:06

@zoltanh721: Ez a TXZ nem a Zenwalk csomagformátuma? Van valami parancssoros alkalmazás, ami ezt tudja? Én nem hallottam még felőle.

Ha tudsz mondani, akkor megcsinálhatom a tesztet a rar-ral egyetemben.

zoltanh721 2009.07.02. 18:41:27

A txz tudomásom szerint Lasse Collin munkája a slackware-nél, akik május 10-én kezdték el a váltást. A parancssoros alkalmazás amit keresel, azt jóformán minden linuxos ismeri. Ez a közönséges v1.22-es tar parancs -xz kapcsolóval fűszerezve. Engem igazából az érdekelne, hogy maga a sima lzma tud-e többet, vagy txz, vagy egyáltalán egyforma mind a kettő, csak más a "gyerek neve".

bagoj ur 2009.07.03. 09:07:41

tar -z az nem gzippel tömörít? Most kicsit megkavarodtam... A gzip az a sima LZ77 (Lempel-Ziv 1977) algoritmus egy kicsit módosított változatát használja. A Lempel-Ziv-Markov algoritmus, amit Te mondasz, az a tar-nál a --lzma kapcsolóval csalogatható elő. De nem tudom, hogy jön ide a TXZ.

Tehát a kérésed az, hogy a tar -z és tar -j mellett a tar --lzma is legyen tesztelve? Vagy a TXZ-t akarod összehasonlítani a tar --lzma-val? És honnan kell letölteni ezt a txz-t?

zoltanh721 2009.07.04. 10:32:16

@bagoj ur: tar -z: de igen. gzip információd is stimmel. Úgy jön ide a TXZ, hogy én is ismerem a tar --lzma kapcsolót, de nem tudom, hogy a --xz kapcsoló az azonos-e az --lzma kapcsolóval (ha pedig nem, akkor mennyiben jobb, mit lehet vele nyerni?). Egyébként igen, ha már tar parancsban van egy csomó tömörítési opció, miért ne lehetne összehasonlítani és mellétenni a többit is? (tar.gz, tar.bz2, tar.txz, tar.lzma- vagyis különböző kiterjesztések közül melyik mire ideális)
A txz kiterjesztést maga a tar 1.22-es verzójában beépítve tömörítés után adja, ami a tar weblapján is szerepel mint kapcsoló. Megjegyzem, egyre inkább felkelti az érdeklődésem txz, mivel a Fedora 12 Constantine feature listájában is szerepel mint komplett rpm-ek tömörítésére az ISO-n belül, helynyerésre. fedoraproject.org/wiki/FeatureList

zoltanh721 2009.07.04. 10:36:46

Egyébként gyanítom, a kiterjesztés egy kicsit hajaz a tar.gz -> tgz, stb. rövídítésekre - csak kérdés h ez a txz is csak egy ilyen trükk: tar.gz.lzma -> txz?
süti beállítások módosítása