Bei der Verteilung von Archiven über das Internet haben im Allgemeinen die folgenden Punkte Priorität:
- Kompressionsverhältnis (dh wie klein der Kompressor die Daten macht);
- Dekomprimierungszeit (CPU-Anforderungen);
- Speicheranforderungen für die Dekomprimierung; und
- Kompatibilität (wie weit verbreitet das Dekomprimierungsprogramm ist)
Die Anforderungen an den Komprimierungsspeicher und die CPU sind nicht sehr wichtig, da Sie dafür eine große schnelle Maschine verwenden können und dies nur einmal tun müssen.
Im Vergleich zu bzip2 hat xz ein besseres Komprimierungsverhältnis und eine niedrigere (bessere) Dekomprimierungszeit. Bei den normalerweise verwendeten Komprimierungseinstellungen wird jedoch mehr Speicher zum Dekomprimieren benötigt [1] und ist etwas weniger verbreitet. Gzip benötigt weniger Speicher als beide.
Daher werden sowohl Archive im gzip- als auch im xz-Format gepostet, sodass Sie Folgendes auswählen können:
- Muss auf einem Computer mit sehr begrenztem Speicher (<32 MB) dekomprimiert werden : gzip. Gegeben, nicht sehr wahrscheinlich, wenn es um Kernelquellen geht.
- Es müssen nur wenige Tools dekomprimiert werden: gzip
- Möchten Sie Download-Zeit und / oder Bandbreite sparen: xz
Es gibt nicht wirklich eine realistische Kombination von Faktoren, die Sie dazu bringen würden, bzip2 auszuwählen. Also wird es auslaufen.
In einem Blog-Beitrag habe ich mir Komprimierungsvergleiche angesehen . Ich habe nicht versucht, die Ergebnisse zu replizieren, und ich vermute, dass sich einiges davon geändert hat (meistens habe ich damit gerechnet, dass es xz
sich verbessert hat, da es das neueste ist.)
(Es gibt einige spezifische Szenarien, in denen eine gute bzip2-Implementierung gegenüber xz vorzuziehen ist: bzip2 kann eine Datei mit vielen Nullen und Genom-DNA-Sequenzen besser komprimieren als xz. Neuere Versionen von xz verfügen jetzt über einen (optionalen) Blockmodus, der die Datenwiederherstellung ermöglicht nach dem Punkt der Korruption und parallel Kompression und [theoretisch] Dekompression. Zuvor bot nur bzip2 diese. [2] jedoch keines von diesem für kernel Verteilung relevant ist)
1: In Archivgröße xz -3
ist um bzip -9
. Dann benötigt xz weniger Speicher zum Dekomprimieren. Aber xz -9
(wie z. B. für Linux-Kernel-Tarballs verwendet) verwendet viel mehr als bzip -9
. (Und xz -0
braucht sogar mehr als gzip -9
).
2: F21 System Wide Change: lbzip2 als Standard bzip2 Implementierung
Erstens steht diese Frage nicht in direktem Zusammenhang mit
tar
. Tar erstellt nur ein unkomprimiertes Archiv, die Komprimierung wird dann später angewendet.Es ist bekannt, dass Gzip im Vergleich zu LZMA2 und bzip2 relativ schnell ist. Wenn es auf die Geschwindigkeit ankommt
gzip
(insbesondere die Multithread-Implementierungpigz
), ist dies oft ein guter Kompromiss zwischen Komprimierungsgeschwindigkeit und Komprimierungsverhältnis. Obwohl es Alternativen gibt, wenn es um Geschwindigkeit geht (z. B. LZ4).Wenn jedoch ein hohes Komprimierungsverhältnis gewünscht wird, schlägt LZMA2
bzip2
in nahezu jedem Aspekt. Die Komprimierungsgeschwindigkeit ist oft langsamer, dekomprimiert jedoch viel schneller und bietet ein viel besseres Komprimierungsverhältnis auf Kosten einer höheren Speichernutzung.bzip2
Abgesehen von der Abwärtskompatibilität gibt es keinen Grund, mehr zu verwenden . Darüber hinaus wurde LZMA2 im Hinblick auf Multithreading entwickelt und viele Implementierungen verwenden standardmäßig Multicore-CPUs (dies istxz
unter Linux leider noch nicht der Fall). Dies ist sinnvoll, da sich die Taktraten nicht mehr erhöhen, sondern die Anzahl der Kerne.Es gibt Multithread-
bzip2
Implementierungen (z. B.pbzip
), die jedoch häufig nicht standardmäßig installiert werden. Beachten Sie auch, dass sich Multithreadingbzip2
beim Komprimieren nur wirklich auszahlt, während beim Dekomprimierenbzip2
im Gegensatz zu LZMA2 ein einziger Thread verwendet wird, wenn die Datei mit einem einzigen Thread komprimiert wurde. Parallelebzip2
Varianten können Multicore-CPUs nur dann nutzen, wenn die Datei mit einer parallelenbzip2
Version komprimiert wurde , was häufig nicht der Fall ist.quelle
z
Option.xz
wird standardmäßig mit mehreren Threads betrieben , sodasspixz
in Zukunft keine Installation erforderlich ist. Auf einigen Plattformen wird dasxz
Threading bereits unterstützt. Wobeibzip2
Multithreading unwahrscheinlich sein wird, da das Format nicht für Multithreading konzipiert wurde. Außerdem wirdpbzip2
die Dekomprimierung nur beschleunigt, wenn die Datei mit komprimiert wurde,pbzip2
was häufig nicht der Fall ist.Kurze Antwort : xz ist effizienter in Bezug auf das Kompressionsverhältnis. Das spart Speicherplatz und optimiert die Übertragung über das Netzwerk.
Sie können diesen Quick Benchmark sehen , um den Unterschied durch praktische Tests zu entdecken.
quelle
LZMA2 ist ein Blockkomprimierungssystem, gzip dagegen nicht. Dies bedeutet, dass sich LZMA2 für Multithreading eignet. Wenn in einem Archiv eine Beschädigung auftritt, können Sie im Allgemeinen mit LZMA2 Daten aus nachfolgenden Blöcken wiederherstellen, dies ist jedoch mit gzip nicht möglich. In der Praxis verlieren Sie nach dem beschädigten Block das gesamte Archiv mit gzip. Bei einem LZMA2-Archiv verlieren Sie nur die Dateien, die von den beschädigten Blöcken betroffen sind. Dies kann bei größeren Archiven mit mehreren Dateien wichtig sein.
quelle