So machen Sie 7-Zip schneller

95939
Mella

Normalerweise verwende ich WinRAR über 7-Zip, nur weil es schneller ist und mit der Komprimierung etwas weniger effizient ist. Ich habe ein paar Tests mit verschiedenen Dateitypen und -größen durchgeführt und die 7-Zip- und WinRAR-Standardeinstellungen für ihre normale Komprimierung und ihre beste Komprimierung verglichen. In vielen Fällen war WinRAR 50% schneller und in einigen Fällen sogar 100% schneller. Aber ich mag FOSS mehr. Hier sind meine Fragen:

  1. Gibt es eine Möglichkeit, 7-Zip zu beschleunigen? 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 Kommandozeile sein.
  3. Ich habe WinRAR und 7-Zip mit der jeweils aktuellen stabilen Version getestet (4-Punkt-etwas mit 7-Zip). Ist die Betaversion 9.x bei der Komprimierung merklich schneller?

Ich spreche davon, dass bei einer vergleichbaren Einstellung in WinRAR schneller ist, als nur die minimale Kompression zu reduzieren.

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 Dual-Boot-Debian x64 5.0.4 und Windows 7 Zuhause.

29
Zu # 2 - 7-zip hat derzeit keine "Wiederherstellungsaufzeichnung" oder "ecc" -Fähigkeit. Sie benötigen Software von Drittanbietern wie QuickPar / MultiPar oder ICE ECC, die jedoch nicht Bestandteil des Archivs ist. afrazier vor 13 Jahren 0

6 Antworten auf die Frage

31
Mokubai

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

Installieren Sie die Beta, klicken Sie mit der rechten Maustaste auf das Archiv, das Sie archivieren möchten, und klicken Sie unter "7-Zip" auf "Zum Archiv hinzufügen ...". Daraufhin wird ein ähnliches Fenster wie im Fenster unten angezeigt. Auf der linken Seite unter Compression Method sollten Sie "LZMA2" finden, mit dem Sie die Anzahl der Threads ändern können. Diese Option wird etwas weiter unten angezeigt.

Dies hat das Potenzial, die Leistung auf> 2 Core-Prozessoren erheblich zu steigern, da dies besser auf Ihr System abgestimmt werden kann und die normale Komprimierungsmethode nur 2 Threads verarbeiten kann.

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

alt text

Anandtech.com hat 7-Zip verwendet, um die Leistungsverbesserungen in Multi-Core- und Multi-Threaded-CPUs zu vergleichen, die ansonsten in der Mehrheit der Software dieser Generation eher theoretisch sind. kmarsh vor 13 Jahren 0
Was ist das Befehlszeilenargument, um LZMA2 zu aktivieren? djangofan vor 12 Jahren 5
@Monkubai: Im i7 4c-8t in meinem Büro kann ich den 7-Zip-Run-8-Core-Run im LZMA2-Modus unabhängig von den eingestellten Einstellungen nicht erhalten. Nur eine Methode, bei der alle 8 Threads ausgeführt werden, verwendet BZip2-Algorithmen (aus dem Dropdown-Menü), die eine niedrigere Komprimierungsrate aufweisen. Edward vor 9 Jahren 0
@ Edward welche version verwendest du? Wenn ich auf 9.20 lzma2 aus dieser Liste auswähle, kann ich bis zu 8 Kerne verwenden. Mokubai vor 9 Jahren 0
@Mokubai 9.20 offizielle Version. Und bei der grafischen Benutzeroberfläche gibt es nichts zu beanstanden. Sie zeigt immer noch 8/8-Kerne-Parameter im Einstellungsfeld an, verwendet jedoch bei der Verarbeitung tatsächlich nur <20% CPU. Ich habe eine kurze Recherche in SU für das Thema durchgeführt, aber noch nicht den Grund für diese merkwürdige Frage herausgefunden. Wenn Sie die Befehlszeile 7z mit Parametern wie -m0 = lzma2 -mmt = 8 verwenden, wird die Komprimierung dann zu 100% ausgetrocknet, aber sobald ich zur GUI wechsle, kehrt sie in den Single-Thread-Modus zurück CPU sehr ineffizient einsetzen (<20%). Edward vor 9 Jahren 1
28
Frederic Malenfant

Da jeder Thread mehrere Dateien gleichzeitig zu komprimieren scheint, besteht die beste Möglichkeit, die Leistung sehr großer ZIP-Jobs zu erhöhen, darin, die Threads auf 1 zu setzen, um sicherzustellen, dass Ihre Festplatte jeweils eine Datei sucht.

Wir verbessern die Leistung bei all unseren täglichen Zip-Backup-Prozeduren, indem wir die -mmt=off7-Zip-Befehlszeile hinzufügen . Das Backup des "Visual SVN Repository", das aus mehreren kleinen Dateien besteht, dauerte zwischen 50 und 60 Minuten.

Mit machen -mmt=offwir es jetzt immer in weniger als fünf Minuten! Während dieser 50 Minuten waren alle Server wegen der Suche nach Festplatten sehr langsam. In diesen fünf Minuten bleibt alles sehr schnell.

Bei allem, was Sie auf einer Maschine tun, 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 die ZIP-Datei auf disk2 zu schreiben, da der physische Kopf nicht von Lesen zu Schreiben wechselt.

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 physische Festplatten

Erstaunlich, dass dies genau das Gegenteil der vorgeschlagenen Antwort ist, aber tatsächlich richtig ist. Ich habe gerade einen Archivierungsvorgang von 12 Stunden auf 2 Stunden gemacht, indem ich auf einen einzelnen Thread gewechselt habe. N Jones vor 9 Jahren 3
Wahr. Das hat auch für mich funktioniert. Wahrscheinlich macht es Sinn, weil er `-mx = 1` verwendet (was fast keine Komprimierung ist). Wenn Sie nicht komprimieren, wird die meiste Arbeit von der Festplatte erledigt. Wenn Sie "-mx = 9" einstellen, müssen die Prozessoren wirklich arbeiten, um die Datei zu komprimieren. Ich müsste es versuchen, aber je nachdem, was der Engpass ist (HDD oder CPU), kann es besser oder schlechter sein. Diego Jancic vor 8 Jahren 2
Diese Antwort ist sehr spezifisch für eine Alterungstechnologie. Es ist wahrscheinlich nicht sinnvoll, dies mit SSDs zu versuchen, da die Suchzeit so viel niedriger ist. Der zufällige IOPS ist weniger ein Engpass. Ihr Fall war ziemlich speziell, weil Sie sehr wenig Komprimierung durchgeführt haben. Im Grunde haben Sie eine Dateikopie gemacht. Ja, der sequenzielle Zugriff auf eine sich drehende HD ist eindeutig ein Gewinner. Typische 7-Zip-Anwendungen werden wahrscheinlich an die CPU gebunden sein, nicht an die E / A-Bindung. 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 vor 8 Jahren 8
Die Verwendung von "-mmt = off" ist sogar mit "-m0 = lzma2 -mx = 5" schneller. (Ohne "-mmt = off"): * real 1m27.811s, Benutzer 2m4.976s, sys 0m3.729s *. Mit "-mmt = off": * real 1m18.896s, Benutzer 1m17.160s, sys 0m1.661s * ) ostrokach vor 8 Jahren 1
Scheint viel langsamer zu sein, um Threads auf 1 zu reduzieren. Mit einem Thread für 20 GB Dateien wurde er mit einer Geschwindigkeit von etwa 2 MB / s verarbeitet. Mit 16 Threads wurde eine Geschwindigkeit von etwa 16 MB / s verarbeitet. Lightyear Buzz vor 7 Jahren 0
@LightyearBuzz Haben Sie sich den Kommentar von @Diego angesehen? mafu vor 7 Jahren 0
0
Joshkunz

Meine Vermutung ist, dass das Beschleunigen von 7-Zip unmöglich ist, ohne die Komprimierungs- / Dekomprimierungsalgorithmen neu zu schreiben. Möglicherweise gibt es eine Art Tweak, das die Geschwindigkeit erhöht, aber es wird wahrscheinlich nur eine Steigerung um 10 oder 15% sein, keine massive 50-100% Steigerung, nach der Sie suchen.

Überhaupt nicht wahr. Sie können 7-zip massiv beschleunigen, indem Sie die Standardeinstellungen einfach ändern. Tatsächlich sind die Standardeinstellungen auf die kleinste Dateigröße (und den langsamsten Kompressionsalgorithmus - BZip2) abgestimmt. Durch die Umstellung auf ZIP und LZMA-Komprimierung auf "Schnellste" wird es enorm schneller. NickG vor 9 Jahren 5
0
chrish

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

Daher können Sie die Komprimierung / Dekomprimierung beschleunigen, indem Sie Ihre Festplatte beschleunigen. Das ist nicht immer möglich.

Meine "Lösung" dafür ist, einfach etwas anderes zu tun, während ich etwas komprimiere. :-)

Wenn Festplatten-E / A-Vorgänge das Problem von Matt waren, würde dies bedeuten, dass WinRAR auf seinem System schneller als 7Zip von der Festplatte lesen kann ... Das klingt für mich unwahrscheinlich. foraidt vor 13 Jahren 2
Es ist möglich, dass WinRAR intelligentere Festplatten-E / A verwendet. Ich weiß, dass der Reißverschluss von Info-ZIP durch die wirklich kleinen I / O-Puffer behindert wird. Aber ja, es könnte ein Unterschied zwischen den Kompressionsalgorithmen sein. chrish vor 13 Jahren 1
Selbst im schnellen Modus ist 7z sicherlich nicht I / O-gebunden. Sarge Borsch vor 9 Jahren 0
Most of the methods you have described do not compress in parallel thus only 1 core of your CPU is used hence on a 2 core machine you get 50%. I'm afraid that are CPU bound on your mac, not IO bound and most macs have SSD that don't really suffer from disk seeks. 7z can compress in parallel if you choose the option to do so. (tar, zip, bzip, gzip, xs generally don't) marto vor 8 Jahren 0
0
Dominique

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>\* 

Das funktioniert gut, aber nachdem ich gerade ein Upgrade auf die neuere Version 16.04 (32-Bit) durchgeführt habe, ist die Leistung enorm gesunken, und ich habe mich für ein Downgrade auf die alte Version entschieden.

0
Max Monterumisi

Ein weiterer kleiner Trick zur Verbesserung der Leistung, wenn Sie Code wie in diesem Beispiel 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) } 

ist, wenn möglich, im 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 so groß (oder größer) ist wie die Originaldatei, und dann eine neue Datei hinzufügen. Ich habe es mit Fällen versucht, in denen es zwei oder mehr große Verzeichnisse gibt, einige MB und ein großes, viele GB, und die Zeitersparnis liegt in der Größenordnung von einigen Minuten.

Ich glaube, dass dies nur gilt, 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 würde eine temporäre Datei überhaupt nicht verwendet. Daniel B vor 5 Jahren 0