Wie man 7-Zip schneller macht

35

Normalerweise verwende ich WinRAR über 7-Zip, weil es mit Komprimierung schneller und nur wenig weniger effizient ist. Ich habe einige Tests mit verschiedenen Dateitypen und -größen durchgeführt, bei denen die 7-Zip- und WinRAR-Standardeinstellungen auf ihre normale Komprimierung und ihre beste Komprimierung hin verglichen wurden. In vielen Fällen war WinRAR 50% schneller und in einigen Fällen sogar 100% schneller. Aber ich mag FOSS mehr. Also hier sind meine Fragen:

  1. Gibt es eine Möglichkeit, die Geschwindigkeit von 7-Zip zu erhöhen? Ich möchte, dass es mindestens der Geschwindigkeit von WinRAR entspricht
  2. Gibt es eine Möglichkeit, Wiederherstellungssegmente in 7-Zip wie in WinRAR zu erstellen? Ich habe keine gesehen, aber ich denke, es könnte eine Befehlszeilensache sein.
  3. Ich habe WinRAR und 7-Zip mit der jeweils neuesten stabilen Version (4-Punkt-Etwas mit 7-Zip) getestet. Ist die Beta-Version von 9.x bei der Komprimierung merklich schneller?

Ich spreche über schneller bei einer vergleichbaren Einstellung in WinRAR, nicht nur auf ein Minimum an Komprimierung zu senken.

Wenn es darauf ankommt, verwende ich einen Quad-Core Intel i7 720 (1,6 GHz) / (2,8 GHz) mit 4 GB DDR3-RAM und die 64-Bit-Version von 7-Zip sowie Debian x64 5.0.4 und Windows 7 mit Dual-Boot Zuhause.

Kefka
quelle
1
In Bezug auf # 2 - 7-zip gibt es derzeit keine "Wiederherstellungsaufzeichnung" oder "ecc" -Fähigkeit. Sie benötigen Software von Drittanbietern wie QuickPar / MultiPar oder ICE ECC, diese ist jedoch nicht Bestandteil des Archivs.
afrazier

Antworten:

36

Wenn Sie die Beta-Version von 7-Zip 9.13 erhalten , können Sie den Archivtyp in LZMA2 ändern und so so viele Threads verwenden, wie Sie möchten, obwohl die Speichernutzung phänomenal zunimmt.

Installiere die Beta, klicke mit der rechten Maustaste auf das Zeug, das du archivieren möchtest und klicke dann im 7-Zip-Kontextmenü auf "Zum Archiv hinzufügen ...". Auf der linken Seite sollten Sie unter Komprimierungsmethode "LZMA2" finden, mit dem Sie die Anzahl der Threads ändern können, die eine Option etwas weiter unten sein werden.

Dies hat das Potenzial, die Leistung auf> 2 Kernprozessoren erheblich zu steigern, da sie besser auf Ihr System abgestimmt werden kann und die normale Komprimierungsmethode nur maximal 2 Threads verarbeiten kann.

Das "/ 1", das Sie rechts neben dem Auswahlfeld für die Anzahl der Threads im Bild sehen, ist die Anzahl der Prozessoren in Ihrem System und damit die empfohlene Anzahl der Threads. Mein i7 ist ein Quad-Core-Prozessor, verfügt aber über Hyperthreading (was hier übrigens tatsächlich hilft), sodass es als "/ 8" angezeigt wird.

Alt-Text

Mokubai
quelle
Anandtech.com hat 7-Zip verwendet, um die Leistungsverbesserungen bei Multi-Core- und Multi-Thread-CPUs zu vergleichen, die ansonsten in den meisten Software-Generationen theoretischer sind.
kmarsh
5
Was ist das Befehlszeilenargument, um LZMA2 zu aktivieren?
Djangofan
@Monkubai: Beim i7 4c-8t in meinem Büro kann ich im LZMA2-Modus keine vollständige 8-Kern-Ausführung mit 7 Reißverschlüssen erzielen, unabhängig von der eingestellten Einstellung. Die einzige Methode, mit der alle 8 Threads ausgeführt werden können, ist die Verwendung von BZip2-Algorithmen (aus dem Dropdown-Menü), die ein niedrigeres Komprimierungsverhältnis aufweisen.
Edward
@Edward welche Version verwendest du? Wenn ich in 9.20 lzma2 aus dieser Liste auswähle, kann ich bis zu 8 Kerne verwenden.
Mokubai
2
@ Mokubai 9.20 offizielle Version. Und an der grafischen Benutzeroberfläche ist nichts auszusetzen. Im Einstellungsfeld werden immer noch 8/8 Kerne angezeigt. Bei der Verarbeitung wird jedoch nur eine CPU-Auslastung von <20% verwendet. Ich habe in SU schnell nachgeforscht, aber den Grund für diese Seltsamkeit noch nicht herausgefunden. Nur wissen, dass wenn ich die Befehlszeile 7z mit einem Parameter wie -m0 = lzma2 -mmt = 8 verwende, die Komprimierung ~ 100% der CPU ultilisiert, aber sobald ich zur GUI wechsle, kehrt sie in den Single-Thread-Modus zurück oder so ähnlich CPU sehr ineffizient nutzen (<20%).
Edward
31

Da jeder Thread scheinbar mehrere Dateien gleichzeitig komprimiert, können Sie die Leistung sehr großer Zip-Jobs am besten steigern, indem Sie den Thread auf 1 setzen, um sicherzustellen, dass Ihre Festplatte nach jeweils einer Datei sucht.

Wir verbessern die Leistung aller unserer täglichen Zip-Backup-Vorgänge durch Hinzufügen -mmt=offeiner 7-Zip-Befehlszeile. Unsere Sicherung des "Visual SVN Repository", das aus mehreren kleinen Dateien besteht, dauerte zwischen 50 und 60 Minuten.

Mit machen -mmt=offwir jetzt immer in weniger als fünf Minuten! Und während dieser 50 Minuten waren alle unsere Server aufgrund der Suche nach Festplatten sehr langsam. Jetzt bleibt in diesen fünf Minuten alles sehr schnell.

Für alles, was Sie auf einem Computer ausführen, ist die Festplattenaktivität immer langsamer als Ihre CPU-Kapazität. Sie können die Festplattenleistung steigern, indem Sie parallele Aktivitäten deaktivieren und sicherstellen, dass die Festplatte Ihre Dateien nacheinander seriell liest (und schreibt).

Es ist auch besser, von Disk1 zu lesen und Ihre ZIP-Datei auf Disk2 zu schreiben, da sich der physische Kopf nicht von Lesen zu Schreiben bewegt.

Beispiellinie für maximale ZIP-Geschwindigkeit bei gleichbleibender Maschinenleistung:

start "" /wait /belownormal c:\Progra~1\7-Zip\7z.exe a -tzip -mx=1 -mmt=off t:\backup.zip d:\folderToBackup\*

D:und T:sind 2 verschiedene physikalische Festplatten

Frederic Malenfant
quelle
5
Erstaunlich, dass dies das genaue Gegenteil der vorgeschlagenen Antwort ist, aber tatsächlich richtig. Ich habe gerade einen Archivierungsvorgang von 12 Stunden auf 2 Stunden reduziert, indem ich zu einem einzelnen Thread gewechselt bin.
N Jones
2
Wahr. Das hat auch bei mir funktioniert. Wahrscheinlich ist es sinnvoll, weil er verwendet -mx=1(was fast keine Komprimierung ist). Wenn Sie nicht komprimieren, wird der größte Teil der Arbeit von der Festplatte erledigt. Wenn Sie festlegen, müssen -mx=9die Prozessoren wirklich arbeiten, um die Datei zu komprimieren. Ich müsste es versuchen, aber je nach Engpass (Festplatte oder CPU) kann es besser oder schlechter sein.
Diego Jancic
9
Diese Antwort ist sehr spezifisch für eine alternde Technologie. Es ist wahrscheinlich nicht sinnvoll, dies mit SSDs zu versuchen, da die Suchzeit so viel kürzer ist. Das zufällige IOPS ist weniger wahrscheinlich der Engpass. Ihr Fall war ziemlich speziell, weil Sie sehr wenig Komprimierung durchgeführt haben. Grundsätzlich haben Sie eine Dateikopie erstellt. Also ja, sequentieller Zugriff auf eine sich drehende HD ist eindeutig ein Gewinner. Typische 7zip-Fälle sind wahrscheinlich CPU-gebunden, nicht IO-gebunden. Dafür ist die Verwendung aller CPU-Kerne unerlässlich. Aber für diejenigen, die sich in einer ähnlichen Situation befinden, ist Ihr Rat sehr wertvoll.
dss539
1
Verwenden -mmt=offist sogar mit schneller -m0=lzma2 -mx=5. (Ohne -mmt=off: echte 1m27.811s, Benutzer 2m4.976s, sys 0m3.729s . Mit -mmt=off: echte 1m18.896s, Benutzer 1m17.160s, sys 0m1.661s )
ostrokach
Scheint für mich viel langsamer zu sein, Threads auf 1 zu reduzieren. Mit 1 Thread für 20 GB Dateien wurde mit einer Geschwindigkeit von ca. 2 MB / s verarbeitet. Mit 16 Threads wurde mit einer Geschwindigkeit von ca. 16 MB / Sek. Verarbeitet.
Lightyear Buzz
0

Alle Komprimierungsalgorithmen, die ich kürzlich verwendet habe (ZIP, RAR, 7z, tar / bzip2), sind E / A-gebunden, nicht CPU-gebunden. Das Betrachten von MenuMeters auf meinem Mac-Laptop zeigt eine konstante Festplattenaktivität, aber nur 50% oder weniger CPU-Aktivität.

Die Möglichkeit, die Komprimierung / Dekomprimierung zu beschleunigen, besteht darin, die Festplatte zu beschleunigen. Das ist nicht immer möglich.

Meine "Lösung" besteht darin, einfach etwas anderes zu tun, während ich etwas komprimiere. :-)

chrish
quelle
2
Wenn Disk I / O Matts Problem wäre, würde das bedeuten, dass WinRAR auf seinem System irgendwie schneller als 7Zip von der Festplatte lesen kann ... Das klingt für mich unwahrscheinlich.
Am
1
Es ist möglich, dass WinRAR intelligentere Datenträger-E / A verwendet. Ich weiß, dass der Reißverschluss von Info-ZIP durch seine wirklich kleinen E / A-Puffer behindert wird. Aber ja, es könnte ein Unterschied zwischen den Komprimierungsalgorithmen sein.
chrish
7z ist sicher auch im schnellen Modus nicht I / O-gebunden.
Sarge Borsch
Die meisten der von Ihnen beschriebenen Methoden werden nicht parallel komprimiert, sodass nur 1 Kern Ihrer CPU verwendet wird. Auf einem 2-Kern-Computer erhalten Sie 50%. Ich befürchte, dass die CPU auf Ihrem Mac gebunden ist, nicht IO-gebunden, und die meisten Macs haben SSD, die nicht wirklich unter Festplatten-Suchanfragen leiden. 7z kann bei entsprechender Auswahl parallel komprimiert werden. (tar, zip, bzip, gzip, xs im Allgemeinen nicht)
Martin
0

In meiner Firma arbeiten wir mit einer alten Version von 7-zip (4.52 Beta) und führen den folgenden Befehl aus:

"C:\Program Files\7-Zip\7z.exe" a -mx7 -mmt -sfx -xr!*.<exclude_extension> <destination>.exe <source_directory>\* 

Dies funktioniert einwandfrei, aber nach dem Upgrade auf die neuere Version 16.04 (32-Bit) ist die Leistung enorm gesunken. Daher habe ich mich entschlossen, ein Downgrade auf die alte Version durchzuführen.

Dominique
quelle
0

Ein weiterer kleiner Trick, um die Leistung zu verbessern, wenn Sie Code wie diesen verwenden:

$7zip = "$env:ProgramFiles\7-Zip\7z.exe"
set-alias sz $7zip
$FileZip = "$DiscoZip\temp\$TempFile"
foreach ($DirData in $ListDir) { $out7z = (sz a $FileZip $DirData) }

Wenn möglich, ist in dem Array $ ListDir die Verzeichnisse nach Größe aufgelistet, vom kleinsten bis zum größten. Dies geschieht, weil 7zip bei jedem foreach-Zyklus eine temporäre Datei erstellt, die genauso groß (oder größer) ist als die ursprüngliche, und dann eine neue Datei hinzufügt. Ich habe es mit Fällen versucht, in denen es zwei oder mehr Verzeichnisse gibt, die einige MB groß und eine große Anzahl GB groß sind, und die Zeitersparnis in der Größenordnung von mehreren Minuten liegt.

Max Monterumisi
quelle
Ich glaube, das gilt nur, wenn Sie Dateien zu einem vorhandenen Archiv hinzufügen. Wenn Sie mehrere Dateien gleichzeitig hinzufügen, wird nur eine temporäre Datei verwendet. Beim Erstellen eines neuen Archivs wird überhaupt keine temporäre Datei verwendet.
Daniel B
-1

Meine Vermutung ist, dass es unmöglich ist, 7-Zip zu beschleunigen, ohne die Komprimierungs- / Dekomprimierungsalgorithmen neu zu schreiben. Möglicherweise gibt es eine Optimierung, die die Geschwindigkeit erhöht, aber wahrscheinlich nur eine Steigerung um 10 oder 15%, keine massive 50-100% mehr, als Sie suchen.

Joshkunz
quelle
6
Überhaupt nicht wahr. Sie können 7-zip massiv beschleunigen, indem Sie einfach die Standardeinstellungen ändern. Tatsächlich sind die Standardeinstellungen auf die kleinste Dateigröße (und den langsamsten Komprimierungsalgorithmus - BZip2) abgestimmt. Wenn Sie ZIP und die LZMA-Komprimierung auf "Am schnellsten" setzen, wird der Vorgang erheblich beschleunigt.
NickG