(Ich habe dies zuerst auf serverfault gepostet, aber dann habe ich gemerkt, dass es wahrscheinlich hierher gehört.)
Ich versuche, eine sehr große Textdatei mit 7za (p7zip) 9.20 zu komprimieren. Die Option -mmt scheint keine Auswirkung zu haben. Ich habe sowohl -mmt = on als auch -mmt = 2 ausprobiert. Dies ist eine 8-Kern-Maschine. Eine Person schlug vor, -m0 = lzma2 als Argument hinzuzufügen, aber das gibt mir nur E_INVALIDARG. Weiß jemand, wie man das zum Laufen bringt?
Dies hat keine Auswirkung:
7za a -mx=9 -mmt=2 -p myarchive.zip bigfile.txt
Und das scheitert mit einem Fehler:
7za a -m0=lzma2 -mx=9 -mmt=2 -p myarchive.zip bigfile.txt
7-Zip (A) [64] 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18
p7zip Version 9.20 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,8 CPUs)
Scanning
Creating archive release_20120601-1-http.zip
System error:
E_INVALIDARG
linux
compression
7-zip
Brian L
quelle
quelle
-mmt
nicht-mmt=2
. Auch ich glaube die richtige Syntax ist-mx9
, obwohl beide funktionieren könnten.Antworten:
Nach -m (Set - Kompressionsverfahren) Schalter # ZipMultiThread - 7ZIP Handbuch & Dokumentation ,
mt
Standardwerteon
, so gibt es keine Notwendigkeit , es überhaupt zu spezifizieren.7zips Implementierung des DEFLATE-Algorithmus unterstützt jedoch kein Multithreading!
Wie Sie bereits festgestellt haben,
Verwendet nur einen Kern.
Aber
.zip
Dateien komprimieren jede Datei einzeln. Beim Komprimieren mehrerer Dateien komprimiert die Multithreading-Option eine Datei pro Kern gleichzeitig.Probieren Sie es aus und Sie werden sehen, dass
verwendet alle verfügbaren
N
Kerne.Wenn Sie die Komprimierung einer einzelnen Datei beschleunigen möchten , haben Sie zwei Möglichkeiten:
Aufgeteilt
bigfile
in Stücke schneiden.Verwenden Sie einen anderen Komprimierungsalgorithmus.
Beispielsweise unterstützt 7zips Implementierung des BZip2-Algorithmus Multithreading.
Die Syntax lautet:
Der Syntaxfehler wird auch durch den Versuch verursacht, den LZM-Algorithmus für einen
.zip
Container zu verwenden. Das ist nicht möglich.Die möglichen Algorithmen für
.zip
Conatiners sind DEFLATE (64), BZip2 und keine Komprimierung.Wenn Sie den LZM-Algorithmus verwenden möchten, verwenden Sie einen
.7z
Container. Dieser Container verarbeitet auch die folgenden Algorithmen: PPMd, BZip2, DEFLATE, BCJ, BCJ2 und keine Komprimierung.quelle
.zip
Container verwenden..ZIP
Container verwendet.Dies ist eine alte Frage und nicht die Antwort auf die spezifische Frage, sondern eine Antwort auf den Grundgedanken der Frage (Verwenden aller Kerne zum Komprimieren eines Zip-Formats).
pigz (paralleles gzip mit .zip Option)
Dadurch erhalten Sie eine zip-kompatible Datei 7x schneller bei gleicher Komprimierungsstufe.
Ein schneller Vergleich von zip-kompatiblen und nicht zip-kompatiblen Kompressoren mit einem oder mehreren Kernen.
wall mal auf i7-2600k um 1.0gb txt datei auf fedora 20 zu komprimieren
wand mal zum dekomprimieren
quelle
Benutze einfach -mmt [N + 1]
Beispiel: -mmt2 steht für einen Thread, -mmt9 für acht Threads
quelle
Verifiziert und getestet: Um Multithreading auf 7za verwenden zu können, muss der Parameter "-mmt #" und nicht "-mmt = #" sein. Wenn Sie das Gleichheitszeichen setzen, wird es ignoriert.
Wie hatte ich entdeckt? Nachdem ich 7z ohne Parameter ausgeführt habe, werden die Informationen zu den Parametern angezeigt. Auf den Schaltern wird "-mmt [N]" und nicht "-mmt = [N]" angezeigt.
Also, wenn ich es richtig verstehe, kann der Parameter, den Sie "-mmt = 2" eingeben, falsch geschrieben und "-mmt2" sein, ohne das Gleichheitszeichen.
Nicht sicher, ob ich gut verstehe, mein Englisch ist wirklich schlecht.
Übrigens, warum benutzt du "7za" anstatt nur "7z"?
Um den Parameter zu testen, führe ich eine Reihe von Befehlen aus, um Benchmarks zu erstellen, und dies bestätigte den Tippfehler in einigen Dokumentationen. Der richtige Parameter muss ohne Gleichheitszeichen eingegeben werden.
Befehl, einen Benchmark mit 7z mit nur einem Thread durchzuführen: 7z b -mmt1
Befehl, einen Benchmark mit 7z mit nur zwei Threads durchzuführen: 7z b -mmt2
Befehl, mit 7za einen Benchmark mit nur zwei Threads durchzuführen: 7za b -mmt2
Befehl, mit 7za einen Benchmark mit nur einem Thread durchzuführen: 7za b -mmt1
Es gibt kein Gleichheitszeichen für den Parameter ˋ-mmt # ˋ, weder für 7z noch für 7za.
quelle