Welche Komprimierungswerkzeuge gibt es in Ubuntu, die von einer Multi-Core-CPU profitieren können ?
compression
multi-core
Luis Alvarado
quelle
quelle
Antworten:
Es gibt zwei Hauptwerkzeuge.
lbzip2
undpbzip2
. Sie sind im Wesentlichen verschiedene Implementierungen von bzip2-Kompressoren. Ich habe sie verglichen (die Ausgabe ist eine aufgeräumte Version, aber Sie sollten in der Lage sein, die Befehle auszuführen)lbzip2
scheint der Gewinner bei zufälligen Daten zu sein. Es ist etwas weniger komprimiert, aber viel schneller. YMMV.quelle
/dev/urandom
ist keine gute Wahl für das Benchmarking von Komprimierungswerkzeugen, da zufällige Daten per Definition inkomprimierbar sind. Das erklärt zum Teil, warum die Ausgabedatei in beiden Fällen ~ 450 MB größer ist als die Eingabe.00000000000000000000000000000000
. So funktioniert Zufall;) Du sprichst von praktischen Durchschnittswerten. Es ist unwahrscheinlich, dass Sie eine 100-MB-Datei mit nur Nullen erstellen. Und ich stimme mit dem Geist dessen überein, was Sie sagen, ich stimme einfach nicht mit der "per Definition" überein, weil das nicht die Definition ist (weil es ungenau ist).wget http://mattmahoney.net/dc/enwik8.zip
zu übermitteln , z. B. 96 MB (21 MB komprimiert) Text aus Wikipedia. Eine viel umfassendere Reihe von Benchmarks finden Sie hier .Nun, das Schlüsselwort war parallel . Nachdem ich nach allen Komprimierungswerkzeugen gesucht hatte, die auch parallel waren, fand ich Folgendes:
PXZ - Parallel XZ ist ein Komprimierungsprogramm, das die LZMA-Komprimierung verschiedener Teile einer Eingabedatei auf mehreren Kernen und Prozessoren gleichzeitig ausführt . Das Hauptziel ist es, alle Ressourcen zu nutzen, um die Komprimierungszeit bei minimalem Einfluss auf das Komprimierungsverhältnis zu beschleunigen.
sudo apt-get install pxz
PLZIP - Lzip ist ein verlustfreier Datenkomprimierer, der auf dem LZMA-Algorithmus basiert, mit sehr sicherer Integritätsprüfung und einer Benutzeroberfläche ähnlich der von gzip oder bzip2. Lzip dekomprimiert fast so schnell wie gzip und komprimiert besser als bzip2, wodurch es sich gut für die Softwareverteilung und Datenarchivierung eignet.
Plzip ist eine massiv parallele (Multithread-) Version von lzip, die das lzip-Dateiformat verwendet. Die von plzip erstellten Dateien sind vollständig mit lzip kompatibel.
Plzip ist für die schnellere Komprimierung / Dekomprimierung großer Dateien auf Multiprozessor-Rechnern vorgesehen und eignet sich daher besonders für die Verteilung großer Softwaredateien und die Archivierung großer Datenmengen. Für Dateien, die groß genug sind, kann plzip Hunderte von Prozessoren verwenden.
sudo apt-get install plzip
PIGZ - pigz, das für die parallele Implementierung von GZip steht, ist ein voll funktionsfähiger Ersatz für gzip, der beim Komprimieren von Daten mehrere Prozessoren und mehrere Kerne nutzt.
sudo apt-get install pigz
PBZIP2 - pbzip2 ist eine parallele Implementierung des Block-Sorting-Dateikomprimierers bzip2, der Pthreads verwendet und auf SMP-Maschinen eine nahezu lineare Geschwindigkeitssteigerung erzielt. Die Ausgabe dieser Version ist vollständig kompatibel mit bzip2 v1.0.2 (dh alles, was mit pbzip2 komprimiert wurde, kann mit bzip2 dekomprimiert werden).
sudo apt-get install pbzip2
LRZIP - Ein Multithread-Komprimierungsprogramm, das bei großen Dateien sehr hohe Komprimierungsraten und -geschwindigkeiten erzielt . Es verwendet die kombinierten Komprimierungsalgorithmen von zpaq und lzma für die maximale Komprimierung, lzo für die maximale Geschwindigkeit und die Reduzierung der Langstreckenredundanz von rzip. Es ist so konzipiert, dass es mit zunehmender RAM-Größe skaliert und die Komprimierung weiter verbessert. Eine Auswahl an Größen- oder Geschwindigkeitsoptimierungen ermöglicht entweder eine bessere Komprimierung als selbst lzma oder eine bessere Geschwindigkeit als gzip, jedoch mit Komprimierungsstufen der Größe bzip2.
sudo apt-get install lrzip
Ein kleiner Komprimierungsbenchmark (mit dem Test Oli erstellt):
URSPRÜNGLICHE DATEIGRÖSSE - 100 MB PBZIP2 - 101 MB (1% größer)
PXZ - 101 MB (1% größer)
PLZIP - 102 MB (1% größer)
LRZIP - 101 MB (1% größer)
PIGZ - 101 MB (1% größer )
Ein kleiner Komprimierungsbenchmark (Verwenden einer Textdatei):
URSPRÜNGLICHE DATEIGRÖSSE - 70 KB Textdatei PBZIP2 - 16,1 KB (23%)
PXZ - 15,4 KB (22%)
PLZIP - 15,5 KB (22,1%)
LRZIP - 15,3 KB (21,8%)
PIGZ - 17,4 KB (24,8%)
quelle
lrzip
kann beispielsweise mit dekomprimiert werdenpbzip2
.Zusätzlich zu der netten Zusammenfassung oben (danke Luis) möchten die Leute heutzutage vielleicht auch PIXZ in Betracht ziehen, was laut README (Quelle: https://github.com/vasi/pixz) der Fall ist. Ich habe die Behauptungen selbst nicht überprüft ) hat einige Vorteile gegenüber PXZ.
Mit anderen Worten, PIXZ ist angeblich speicher- und festplatteneffizienter und verfügt über eine optionale Indizierungsfunktion, die die Dekomprimierung einzelner Komponenten komprimierter TAR-Dateien beschleunigt.
quelle
pixz
Archive mit Standard nicht kompatibel sindxz
Format, die Art und Weisepxz
wäre.pixz
Kannxz
Archive dekomprimieren und Archivexz
dekomprimierenpixz
. Die Befehlszeilenoptionen sind jedoch ein-xz
undpixz
unterschiedlich.pixz
.Aktualisieren:
XZ Utils unterstützt die Multithread-Komprimierung seit Version 5.2.0. Ursprünglich wurde dies fälschlicherweise als Multithread-Dekomprimierung dokumentiert.
Zum Beispiel:
tar -cf - source | xz --threads=0 > destination.tar.xz
quelle
export XZ_DEFAULTS="-T 0"
und dann einfach Ihren üblichen tar-Anruf verwenden, dhtar cJf target.tar.xz source
.lzop kann auch eine praktikable Option sein, obwohl es Single-Threaded ist.
Es wird der sehr schnelle lempel-ziv-oberhumer- Komprimierungsalgorithmus verwendet, der meiner Beobachtung nach 5-6 mal schneller ist als gzip.
Hinweis: Obwohl es noch kein Multithreading-System ist, übertrifft es Pigz auf 1-4-Core-Systemen wahrscheinlich. Deshalb habe ich mich entschlossen, dies zu posten, auch wenn es Ihre Frage nicht direkt beantwortet. Probieren Sie es aus, es kann Ihr CPU-Engpass-Problem lösen, wenn Sie nur eine CPU verwenden und etwas schlechter komprimieren. Ich fand es oft eine bessere Lösung als zB pigz.
quelle
Der LZMA2-Kompressor von p7zip verwendet beide Kerne auf meinem System.
quelle
Es ist keine wirkliche Antwort, aber ich denke, es ist relevant genug, um meine Benchmarks zu teilen und die Geschwindigkeit von
gzip
undpigz
auf einer realen Hardware in einem realen Szenario zu vergleichen.pigz
Genau wie die Multithread-Evolution, die ich von nun an persönlich gewählt habe.Metadaten:
Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz
(4c / 8t) + Nvme SSDXubuntu 17.10 (artful)
gzip
Ausführung:1.6
pigz
Ausführung:2.4
gzip
schnellgzip
Bestepigz
schnellpigz
am besten (neinzopfli
)pigz
+zopfli
AlgorithmusUnter dem Strich würde ich den
zopfli
Algorithmus nicht empfehlen , da die Komprimierung enorm viel Zeit in Anspruch nahm, um nicht so viel Speicherplatz zu sparen.Resultierende Dateigrößen:
quelle
Zstandard unterstützt Multi-Threading seit v1.2.0 ¹. Es ist ein sehr schneller Kompressor und Dekompressor, der gzip ersetzen soll, und es kann auch so effizient - wenn nicht sogar besser - komprimieren wie LZMA2 / XZ auf höchstem Niveau.
Sie müssen artful oder eine neuere Version verwenden oder die neueste Version aus dem Quellcode kompilieren, um diese Vorteile nutzen zu können. Zum Glück bringt es nicht viele Abhängigkeiten mit sich.
quelle