rzip - a nagy file-ok tömörítéséhez

Címkék

Hubertf NetBSD blogjában találtam az alábbi gzip, bzip2 és rzip összehasonlítást. A g4u készítőjének a levlistán ajánlották az rzip-et. Állítólag sokkal jobb hatásfokkal tömöríti a nagy fileokat, mint a bzip. Lássuk:512 MB qemu image tömörítése:

-rw-r--r-- 1 root wheel 524288000 Mar 30 19:39 harddisk

-rw-r--r-- 1 feyrer wheel 241776704 Jul 20 04:14 harddisk.gz

-rw-r--r-- 1 feyrer wheel 228779032 Jul 20 04:55 harddisk.bz2

-rw-r--r-- 1 feyrer wheel 196960165 Jul 20 04:39 harddisk.rz

És valóban, az rzip nyert.

Az rzip honlapja itt. Megtalálható NetBSD pkgsrc-ben, a FreeBSD ports-ban, a Debianban...

Hozzászólások

Inkább a SevenZippel (7Z) kellene összeengedni. És mi a helyzet a tömörítési idővel?

Kiprobaltam (mondjuk nem annyira nagy fileokkal), de itt is van kulonbseg:

$ ls -la mbox

-rw------- 1 trey trey 52912611 2005-07-20 10:54 mbox


$ ls -la mbox.bz2

-rw------- 1 trey trey 30984531 2005-07-20 11:02 mbox.bz2

$ time bzip -9 mbox

real 1m2.409s

user 0m57.260s

sys 0m0.188s

$ time bunzip2 mbox

real 0m17.072s

user 0m15.973s

sys 0m0.268s


$ ls -la mbox.rz

-rw------- 1 trey trey 29959725 2005-07-20 10:58 mbox.rz

$ time rzip mbox

real 0m40.209s

user 0m38.454s

sys 0m1.028s

$ time rzip -d mbox.rz

real 0m20.340s

user 0m14.529s

sys 0m4.064s

On 2005-07-20, Micskó Gábor <trey@hup.hu> wrote:
>
> Hubertf NetBSD blogjában [0] találtam az alábbi gzip, bzip2 és rzip
> összehasonlítást. A g4u [1] készít?jének a levlistán ajánlották az rzip-et.
> Állítólag sokkal jobb hatásfokkal tömöríti a nagy fileokat, mint a bzip.
> Lássuk:
>
> 512 MB qemu image tömörítése:
>
> -rw-r--r-- 1 root wheel 524288000 Mar 30 19:39 harddisk
>
> -rw-r--r-- 1 feyrer wheel 241776704 Jul 20 04:14 harddisk.gz
>
> -rw-r--r-- 1 feyrer wheel 228779032 Jul 20 04:55 harddisk.bz2
>
> -rw-r--r-- 1 feyrer wheel 196960165 Jul 20 04:39 harddisk.rz
>
> És valóban, az rzip nyert.

Hmm, azert jegyezzuk meg, amire Tridge (merthogy ezt is o kovette el)
kapasbol felhivja a figyelmet:

* nem pipe-olhato
* tobb szaz mega RAMra is szuksege lehet

(de gyors, nem mint a bz2).

Cs.

En inkabb maradok a gzip mellett. Csak ha tenyleg

cipokanallal kell begyomoszolni valahova a cuccot akkor

hasznalok mast. De altalaban nem eri meg a gyakran

tizszer hosszabb tomoritesi ido azt a nehany megat.

A tenylegesen nagy fajlokhoz (>10G) az lzop inkabb hasznalhato. Nem tomorit annyira mint a tobbi tomorito, ellenben kozel disk olvasasi/irasi sebesseggel dolgozik.

Összevetettem a két tömörítőt, az eredmény kissé meglepett, itt is az rzip lett a jobb. Bár az is igaz, hogy az rzip-nek közel 4.5x annyi időre volt szüksége mint a 7zip-nek. És az rzip nem pipelineolható, még a 7zip igen.

2.6.7-ck (fordítás után; make mrproper nélküli) kernelforráson tesztelve:

> cd linux-2.6.7-ck5

> du

371497 (363Mb)

.......

> time 7za a linux-2.6.7-ck5.7z linux-2.6.7-ck5/

real 21m39.394s

user 15m20.484s

sys 0m11.950s

> ls -la

-rw-r--r-- 1 root root 65819551 júl 20 11:49 linux-2.6.7-ck5.7z (63Mb)

..........

> time rzip -9 linux-2.6.7-ck5.tar

real 94m6.115s

user 4m3.181s

sys 0m32.941s

> ls -la

-rw-r--r-- 1 root root 50512908 júl 20 13:39 linux-2.6.7-ck5.tar.rz (49Mb)

bzip2re még nem volt időm, ha lesz eredmény kiteszem.

Kipróbáltam tar.7z készítését is, ami újabb meglepetést hozott:

> time tar cf - linux-2.6.7-ck5/ | /usr/local/bin/7za a -si linux-2.6.7-ck5.tar.7z

real 14m23.309s

user 13m11.937s

sys 0m12.134s

> ls -la

-rw-r--r-- 1 root root 54532030 júl 20 14:55 linux-2.6.7-ck5.tar.7z (53Mb)

A 7zip bár képes több file, illetve könytárszerkezet tárolására saját kapszulafile-jában, de így nem tudja tárolni a fileokhoz tartozó tulajdonosi információkat. Ezért unix rendszereken érdemesebb tar-al együtt használni. (bzip2 és az rzip eleve csak így használható).

És így nemcsak gyorsabban végzett a művelettel a 7zip, de az archiv mérete is jelentősen csökkent 17%-al. Már csak alig 4Mb-al kisebb az rzip féle file.

Ezzel a 7zip a nyerő, mert jóval rövidebb idő alatt készített, alig nagyobb tömörített filet.

A kernel könytáraiban valóban sok kis file van, de ha betesszük az egészet egy nagy tar archivba akkor már az nem fog sokban különbözni pl az mbox filetól. Az rzippel ezt a 326Mb-os inux-2.6.7-ck5.tar filet tömörítettem.

Egyébként a 7zip is sokkal jobb tömörítési eredményt ért el akkor amikor a nagy inux-2.6.7-ck5.tar filet kellett tömörítenie. Imho amikor csak simán a linux forrás könyvtár lett megadva neki, az első tesztben valószínűleg egyesével tömörítette be a kernel kis filejait és azokat fűzte egybe.

Azt még érdekes lenne megnézni, milyen eredmények születnek, ha zömmel szöveg tartalmú nagy fileok - mint a inux-2.6.7-ck5.tar vagy az mbox - helyett bináris tartalmú nagy fileokat tömörítenénk. A programok fileok általában elég kicsik, még a nagynak számító mame elf-fileja is csak 10Mb körüli, az adatfileok - mint pl. a jatékok adatfilejai - pedig már általában tömörítve vannak.

Viszont egy tar-ba pakolt /usr/bin könytár megfelel a célnak.

Közben lefuttatam az rzip-et default ( -6) módban is, így jóval gyosrabban végzett és a méret sem nőtt jelentősen - csak 300kb-al lett nagyobb-. A futási idő még így is a duplája a 7zip eredményének.

> time rzip linux-2.6.7-ck5.tar

real 30m54.833s

user 3m1.843s

sys 0m12.561s

> ls -la

-rw-r--r-- 1 root root 50823767 júl 20 16:34 linux-2.6.7-ck5.tar.rz (49Mb)

több gigás log-file-okkal nem próbálta senki?

Gép:

cat /proc/cpuinfo

processor : 0

vendor_id : GenuineIntel

cpu family : 15

model : 2

model name : Intel(R) Pentium(R) 4 CPU 2.66GHz

stepping : 9

cpu MHz : 2665.972

cache size : 512 KB

flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe cid

bogomips : 5229.77

1 gb ram, raid 1 diszkek, reiserfs fajlrendszer

testfile (mailman archivumok)

-rw-r--r-- 1 root root 2210498560 Jul 20 20:58 mailman.tar (2 giga)

time rzip -9 mailman.tar

real 18m9.009s

user 14m1.700s

sys 0m32.430s

kb 800 megat evett vegig a memoriabol:

-rw-r--r-- 1 root root 648341778 Jul 20 21:20 mailman.tar.rz (640 mb)

time bzip2 --best mailman.tar

real 28m41.497s

user 26m7.910s

sys 0m19.300s

kb 10 megat evett a memoriabol:

-rw-r--r-- 1 root root 921607109 Jul 20 21:33 mailman.tar.bz2

(900 mb)

Misi

Leteszteltem bináris fileon is.

Egy tar-ba pakoltam a /usr/bin filejait, majd ezt tömörítettem.

> tar cvf binaryfiles.tar ./bin/

> ls -la

-rw-r--r-- 1 root root 240128000 júl 20 17:37 binaryfiles.tar (230Mb)

7zip eredménye

> time 7za a binaryfiles.tar.7z binaryfiles.tar

real 11m59.604s

user 10m53.713s

sys 0m14.048s

> ls -la

-rw-r--r-- 1 root root 65278453 júl 20 17:51 binaryfiles.tar.7z (63Mb)

rzip eredménye default módban

> time rzip binaryfiles.tar

real 7m33.986s

user 2m40.596s

sys 0m8.542s

> ls -la

-rw-r--r-- 1 root root 65943941 júl 20 18:32 binaryfiles.tar.rz (63Mb)

rzip eredménye legnagyobb tömörítésnél

> time rzip -9 binaryfiles.tar

real 18m36.574s

user 3m17.193s

sys 0m12.045s

> ls -la

-rw-r--r-- 1 root root 64523561 júl 20 20:59 binaryfiles.tar.rz (62Mb)

Biráris állomány esetében kiegyenlítettebbek lettek az eredmények, megközelítőleg azonosan teljesített a 7zip és az rzip. Az rzip-nél nem érdemes használni a maximális tömörítést bekacsoló 9 opciót, csak kicsit lesz kisebb az archiv mérete, de a furási idő jelentősen megnő

Végül a teljesség kedvéért, bzip2 képességeit is teszteltem a fent említett bináris tartalmú állományon. Gondolom nem meglepetés, hogy a hatásfoka elmarad a mindkét másik tömörítőtől.

> time bzip2 binaryfiles.tar

real 4m58.171s

user 3m50.604s

sys 0m5.231s

> ls -la

-rw-r--r-- 1 root root 84559608 júl 20 22:20 binaryfiles.tar.bz2 (81Mb)