Jak zrobić 7-Zip szybciej

35

Zwykle używam WinRAR ponad 7-Zip po prostu dlatego, że jest szybszy i tylko trochę mniej wydajny przy kompresji. Zrobiłem kilka testów dla różnych typów i rozmiarów plików, porównując domyślne ustawienia 7-Zip i WinRAR z ich normalną kompresją i najlepszą kompresją, aw wielu przypadkach WinRAR był o 50% szybszy, a w niektórych faktycznie o 100% szybszy. Ale bardziej lubię FOSS. Oto moje pytania:

  1. Czy istnieje sposób na przyspieszenie 7-Zip? Chciałbym, żeby przynajmniej była na równi z prędkością WinRAR
  2. Czy istnieje sposób na utworzenie segmentów odzyskiwania w 7-Zip, tak jak w WinRAR? Nie widziałem żadnych, ale myślę, że może to być wiersz poleceń.
  3. Przetestowałem WinRAR i 7-Zip przy użyciu najnowszej stabilnej wersji każdego z nich (4-kropkowe coś z 7-Zip). Czy wersja beta 9.x jest zauważalnie szybsza podczas kompresji?

Mówię o szybszym przy porównywalnym ustawieniu w WinRAR, a nie tylko obniżeniu do absolutnej minimalnej kompresji.

Jeśli to ważne, używam czterordzeniowego procesora Intel i7 720 (1,6 GHz) / (2,8 GHz) z 4 GB pamięci RAM DDR3 i 64-bitowej wersji 7-Zip oraz podwójnego rozruchu Debian x64 5.0.4 i Windows 7 Dom.

Kefka
źródło
1
Odnośnie # 2 - 7-zip nie ma obecnie żadnej zdolności „odzyskiwania rekordu” lub „ecc”. Będziesz potrzebował oprogramowania innych firm, takiego jak QuickPar / MultiPar lub ICE ECC, ale nie będzie to częścią archiwum.
afrazier

Odpowiedzi:

36

Jeśli otrzymasz wersję 7-Zip 9.13 w wersji beta , możesz zmienić typ archiwum na LZMA2, dzięki czemu możesz używać tyle wątków, ile chcesz, chociaż użycie pamięci rośnie fenomenalnie.

Zainstaluj wersję beta, kliknij prawym przyciskiem myszy elementy, które chcesz zarchiwizować, a następnie w menu kontekstowym 7-Zip kliknij „Dodaj do archiwum ...”, a otrzymasz coś podobnego do okna poniżej. Po lewej stronie w części Metoda kompresji powinieneś znaleźć „LZMA2”, który pozwoli ci zmienić liczbę wątków, co będzie opcją nieco niżej.

Może to znacznie zwiększyć wydajność procesorów> 2-rdzeniowych, ponieważ można je lepiej dostroić do systemu, a normalna metoda kompresji może obsłużyć maksymalnie 2 wątki.

Symbol „/ 1” widoczny po prawej stronie pola wyboru liczby wątków na obrazie to liczba procesorów w systemie, a zatem zalecana liczba wątków. Mój i7 jest czterordzeniowym procesorem, ale ma hyperthreading (co tak naprawdę pomaga tutaj przy okazji), więc pokazuje się jako „/ 8”

alternatywny tekst

Mokubai
źródło
Anandtech.com korzysta z 7-Zip do testowania wydajności w wielordzeniowych i wielowątkowych procesorach, co w innych przypadkach jest bardziej teoretyczne w większości oprogramowania tej generacji.
kmarsh
5
Co to jest argument wiersza poleceń, aby włączyć LZMA2?
djangofan
@Monkubai: W i7 4c-8t w moim biurze nie mogę uzyskać pełnego uruchomienia 8-rdzeniowego 7-zip w trybie LZMA2, niezależnie od ustawionych ustawień. Tylko metoda pozwala na uruchomienie wszystkich 8 wątków przy użyciu algorytmów BZip2 (z menu rozwijanego), który ma niższy stopień kompresji.
Edward
@ Edward, jakiej wersji używasz? 9.20, jeśli wybiorę LZMA2 z tej listy, dostanę opcję użycia do 8 rdzeni.
Mokubai
2
@Mokubai 9.20 oficjalna wersja. I nie ma nic złego w graficznym interfejsie użytkownika, nadal wyświetla parametr 8/8 rdzeni w panelu ustawień, ale podczas przetwarzania faktycznie używa tylko <20% procesora. Zrobiłem szybkie badanie problemu w SU, ale jeszcze nie odkryłem przyczyny tego dziwnego. Po prostu wiedz, że jeśli użyję wiersza polecenia 7z z parametrem takim jak -m0 = lzma2 -mmt = 8, wówczas kompresja zapewnia ~ 100% procesora, ale po przejściu na GUI powraca do trybu jednowątkowego lub czegoś takiego ... wykorzystuj procesor w bardzo nieefektywny sposób (<20%).
Edward,
31

Ponieważ wydaje się, że każdy wątek kompresuje wiele plików jednocześnie, najlepszą rzeczą, jaką możesz zrobić, aby zwiększyć wydajność bardzo dużych zadań zip, jest ustawienie wątków na 1, aby mieć pewność, że dysk twardy będzie szukał jednego pliku na raz.

Poprawiamy wydajność wszystkich naszych codziennych procedur tworzenia kopii zapasowych zip, dodając -mmt=offdo linii poleceń 7-zip. Tworzenie kopii zapasowej „wizualnego repozytorium SVN”, które składa się z wielu małych plików, trwało od 50 do 60 minut.

Dzięki -mmt=offteraz zawsze robimy to w mniej niż pięć minut! W ciągu tych 50 minut wszystkie nasze serwery działały bardzo wolno z powodu poszukiwania dysków twardych. Teraz wszystko pozostaje bardzo szybkie w ciągu tych pięciu minut.

W przypadku wszystkich czynności wykonywanych na komputerze aktywność dysku twardego będzie zawsze wolniejsza niż pojemność procesora. Możesz zwiększyć wydajność dysku, wyłączając równoległe działania i upewniając się, że dysk twardy odczytuje (i zapisuje) twoje pliki jeden po drugim.

Lepiej jest również czytać z dysku 1 i zapisywać plik ZIP na dysku 2, ponieważ fizyczna głowa nie przesuwa się z odczytu do zapisu.

Przykładowa linia, aby uzyskać maksymalną prędkość ZIP przy zachowaniu wydajności maszyny:

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

D:i T:są 2 różnymi dyskami fizycznymi

Frederic Malenfant
źródło
5
Zadziwiające, że jest to dokładne przeciwieństwo sugerowanej odpowiedzi, ale w rzeczywistości jest poprawne. Właśnie zmieniłem operację archiwizacji z 12 godzin na 2, zmieniając na używanie pojedynczego wątku.
N Jones
2
Prawdziwe. To też działało dla mnie. Prawdopodobnie ma to sens, ponieważ używa -mx=1(co prawie nie ma kompresji). Jeśli nie kompresujesz, większość pracy wykonuje dysk twardy. Jeśli ustawisz -mx=9procesory, naprawdę musisz pracować, aby skompresować plik. Musiałbym spróbować, ale w zależności od wąskiego gardła (HDD lub procesor) może być lepiej lub gorzej.
Diego Jancic,
9
Ta odpowiedź jest bardzo specyficzna dla starzejącej się technologii. Prawdopodobnie nie warto wypróbować tego na dyskach SSD, ponieważ czas wyszukiwania jest o wiele krótszy. Przypadkowe IOPS jest mniej prawdopodobne, że będzie wąskim gardłem. Twoja sprawa była wyjątkowa, ponieważ wykonałeś bardzo małą kompresję. Zasadniczo robiłeś kopię pliku. Tak, tak, sekwencyjny dostęp do obracającego się HD jest zdecydowanie zwycięzcą. Typowe przypadki użycia 7zip będą prawdopodobnie związane z procesorem, a nie z operacjami we / wy. Do tego niezbędne jest użycie wszystkich rdzeni procesora. Ale dla osób w podobnej sytuacji twoja rada jest bardzo cenna.
dss539,
1
Korzystanie -mmt=offjest szybsze nawet z -m0=lzma2 -mx=5. (Bez -mmt=off: rzeczywistych 1m27.811s, 2m4.976s użytkowników, sys 0m3.729s . Z -mmt=off: rzeczywistych 1m18.896s, 1m17.160s użytkowników, sys 0m1.661s )
ostrokach
Wydaje mi się, że znacznie wolniej zmniejszam wątki do 1. Przy 1 wątku na 20 GB plików przetwarzano je z prędkością około 2 MB / s. Z 16 wątkami przetwarzał z prędkością około 16 MB / s.
Lightyear Buzz
0

Wszystkie algorytmy kompresji, których ostatnio używałem (ZIP, RAR, 7z, tar / bzip2) są związane z wejściem / wyjściem, a nie z procesorem. Oglądanie MenuMeters na moim laptopie Mac pokazuje stałą aktywność dysku, ale tylko 50% lub mniej aktywności procesora.

Zatem sposobem na przyspieszenie kompresji / dekompresji jest przyspieszenie dysku. Nie zawsze jest to możliwe.

Moje „rozwiązanie” tego problemu polega na zrobieniu czegoś innego podczas kompresji. :-)

chrish
źródło
2
Jeśli dysk I / O był problemem Matta, oznaczałoby to, że WinRAR jest w stanie w jakiś sposób czytać z dysku szybciej niż 7Zip w swoim systemie ... To wydaje mi się mało prawdopodobne.
zapomniany
1
Możliwe, że WinRAR używa inteligentniejszych dysków I / O; Wiem, że zip Info-ZIP jest utrudniony przez jego naprawdę małe bufory we / wy. Ale tak, może to być różnica między algorytmami kompresji.
chrish
7z z pewnością nie jest związany z I / O nawet w trybie szybkim.
Sarge Barszcz
Większość opisanych przez ciebie metod nie kompresuje się równolegle, dlatego tylko 1 rdzeń twojego procesora jest używany, dlatego na maszynie 2-rdzeniowej dostajesz 50%. Obawiam się, że są one związane z procesorem na twoim komputerze Mac, a nie we / wy, a większość komputerów Mac ma dysk SSD, który tak naprawdę nie cierpi z powodu szukania dysku. 7z może kompresować równolegle, jeśli wybierzesz taką opcję. (tar, zip, bzip, gzip, xs ogólnie nie)
Martin
0

W mojej firmie pracujemy ze starą wersją 7-zip (4.52 beta) i uruchamiamy następujące polecenie:

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

Działa to dobrze, ale po uaktualnieniu do nowszej wersji 16.04 (32-bitowej) wydajność ogromnie spadła, więc postanowiłem przywrócić starszą wersję.

Dominique
źródło
0

Kolejna mała sztuczka, aby poprawić wydajność, gdy używasz kodu takiego jak ten przykład:

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

jest, jeśli to możliwe, mieć w tablicy $ ListDir listę katalogów według wielkości, od najmniejszej do największej. Dzieje się tak, ponieważ w każdym cyklu foreach program 7zip tworzy plik tymczasowy, który jest tak duży (lub większy) niż oryginalny, a następnie dodaje do nich nowy plik. Próbowałem z przypadkami, w których istnieją dwa lub więcej katalogów, duży MB i jeden duży wiele GB, a oszczędność czasu jest rzędu kilku minut.

Max Monterumisi
źródło
Uważam, że dotyczy to tylko dodawania plików do istniejącego archiwum. Podczas dodawania wielu plików jednocześnie użyty zostanie tylko jeden plik tymczasowy. Podczas tworzenia nowego archiwum plik tymczasowy w ogóle nie byłby używany.
Daniel B
-1

Domyślam się, że przyspieszenie 7-Zip jest niemożliwe bez ponownego zapisania jego algorytmów kompresji / dekompresji, może istnieć pewien rodzaj ulepszenia, który zwiększa prędkość, ale prawdopodobnie będzie to tylko wzrost o 10 lub 15%, a nie ogromny 50-100% wzrostu, którego szukasz.

Joshkunz
źródło
6
Zupełnie nieprawda. Możesz znacznie przyspieszyć 7-zip, po prostu zmieniając ustawienia domyślne. W rzeczywistości ustawienia domyślne są dostosowane do najmniejszego rozmiaru pliku (i najwolniejszego algorytmu kompresji - BZip2). Zmiana na kompresję ZIP i LZMA na „Najszybszą” sprawia, że ​​jest znacznie szybszy.
NickG