So wurde mein Blog letztens von einem guten Kumpel bezeichnet - und recht hat der Sack auch noch ;)
Ich gelobe (wie immer ;D ) Besserung und fange mal mit einem technischen Artikel an. Diese kommen hier in letzter Zeit viel zu kurz und ich neige immer mehr dazu, alles im Kopf haben zu wollen, da ich mir die Zeit zum aufschreiben einfach nicht nehme. Stattdessen landet hier nur so ein privat-Blödsinn ... Ich erkläre hiermit das Ziel, diesem Blog wieder einen Schwerpunkt auf die IT und technische Hintergründe zu legen - bin selbst gespannt ... ;)

Beginnen möchte ich mit einem super geilen Tipp.

Ich verwende, wie wohl die meisten Linuxer auf der Welt auch, seit Jahr und Tag GNU bzip2 und GNU gzip zur Kompression von Daten auf der Shell. Was mir jedoch heute das erste Mal aufgefallen ist, ist das diese beiden Programme nur einen einzigen Core aktueller Multi-Core CPUs zu 100% auslasten, und die restlichen brach liegen. Gerade bei der Kompression von Daten dreht sich alles um die Leistungsfähigkeit des Prozessors - eine der wenigen Ausnahmen in meinem Arbeitsalltag, wo die Festplatten mal nicht der Flaschenhals sind. Von daher ist diese Verschwendung in der heutigen Okta-Core - Zeit schon ziemlich maßgeblich für manche Vorgänge, wie z.B. beim (De-)Komprimieren von MySQL Dumps, ISO Images von DVDs, Logfilerotation, etc.

Ich habe also etwas recherchiert und bin zunächst auf pbzip2 gestoßen; einem Re-Write des GNU bzip2 Programmes, welches Multicores unterstützt.
Hiermit hatte ich aber zunächst nur eine Lösung für bzip2, also suchte ich weiter.

Schließlich stieß ich auf einen guten, alten Bekannten, den in seiner GUI - Form sicherlich auch Nicht-Linuxer kennen: 7zip ! Kurzbeschreibung: 7zip ist ein freies Programm (GNU LGPL) für nahezu alle gängigen Betriebssysteme, welches sowohl nahezu alle gängigen Archivformate und Kompressionsalgorithmen beherrscht, sowie auch ein eigenes Format mitsamt Algorithmus mit sich bringt, welches in vielen Situationen sogar eine höhere Kompressionsrate erreicht als bzip2 (durchschnittlich etwa 50-70% höher als ZIP!).
Dieses beherrscht nicht nur die Archivformate 7z, zip, gzip, bzip2, tar und rar (beim reinen entpacken unterstützt es zudem sogar noch: ARJ, CAB, CHM, CPIO, CramFS, DEB, DMG, FAT, HFS, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, RAR, RPM, SquashFS, UDF, VHD, WIM, XAR und Z) , sondern auch Multi-Threading und ist somit die perfekte Lösung für Multicores. Es liegt beispielsweise im Ubuntu Lucid Lynx (10.04) Repository unter den Namen "p7zip", "p7zip-full" und "p7zip-rar" vor und kann somit ganz normal und einfach installiert werden.

Ich habe damit heute mal einen schnellen Test gemacht. Diese zahlen stammen von einem Quad-Core System, auf welchem neben diesen Tests auch meine ganz normale Arbeitsumgebung ausgeführt wird, also bitte dizzed mich nicht wegen "lamer"Ergebnisse ;)

Testbeschreibung

Ich habe das ISO Image kubuntu-9.10-alternate-i386.iso von einem Kubuntu - Mirror herunter geladen. Dieses werde ich mit dem bzip2 Algorithmus zunächst mit GNU bzip2 und 7zip auf höchster Kompressionsstufe (9) komprimieren. Diesen Prozess messe ich mit dem Linux-Tool "time". Anschließend entpacke ich beide Varianten mit GNU bzip2 und erzeuge für die Ergebnisse einen MD5 Hash, um die Kompatibilität mit der Refferenzimplementation sicher zu stellen.

Test mit GNU bzip2

root@archangel:~# time bzip2 ~mr/Downloads/ISO_Images/kubuntu-9.10-alternate-i386.iso -c -9 > bzip2.bz2

real    2m41.266s
user    2m29.250s
sys     0m1.400s

Test mit 7zip

root@archangel:~# time 7z a -tbzip2 -o. bzip2_7z.bz2 ~mr/Downloads/ISO_Images/kubuntu-9.10-alternate-i386.iso

7-Zip 9.04 beta  Copyright (c) 1999-2009 Igor Pavlov  2009-05-30
p7zip Version 9.04 (locale=de_DE.UTF-8,Utf16=on,HugeFiles=on,4 CPUs)
Scanning

Creating archive bzip2_7z.bz2

Compressing  kubuntu-9.10-alternate-i386.iso

Everything is Ok

real    1m17.121s
user    4m6.090s
sys     0m1.420s

Auswertung

Ich habe dabei mit "htop -d 1" die CPU Auslastung beobachtet: Bei GNU bzip2 wurde erwartungsgemäß nur einer der 4 Cores zu 100% ausgelastet. Mit 7zip tatsächlich alle 4!

Das Ergebnis dieser Kompressionen war nahezu identisch. Nur ca 2 kb (bei einer Eingangsgröße von rund 700 MB) Abweichung war feststellbar, was ich für vernachlässigbar halte. Die MD5 Sums der mit GNU bzip2 entpackten Archive war identisch; die GNU bzip2 Kompatibilität des durch 7zip erzeugten Archives ist also gegeben.

Wie die obigen Zahlen zeigen, war 7zip ziemlich genau doppelt so schnell, wie die GNU bzip2 Refferenzimplementation. Ich hätte zwar mehr erwartet, jedoch wird ziemlich viel für die Threadverwaltung aufgewendet werden müsen.

Dasselbe lässt sich nun natürlich auch mit GNU gzip erreichen - Zahlen spare ich mir mal. Das kann jeder selbst mal messen :)

Teilen per: TwitterEmail


Comments

comments powered by Disqus