(Opublikowałem ten pierwszy błąd serwera, ale potem zdałem sobie sprawę, że prawdopodobnie należy tutaj.)
Próbuję skompresować bardzo duży plik tekstowy przy użyciu 7za (p7zip) 9.20. Opcja -mmt nie wydaje się mieć żadnego efektu. Próbowałem zarówno -mmt = on, jak i -mmt = 2. To jest 8-rdzeniowa maszyna. Jedna osoba zasugerowała dodanie -m0 = lzma2 jako argumentu, ale to po prostu daje mi E_INVALIDARG. Czy ktoś wie, jak to zrobić?
To nie ma wpływu:
7za a -mx=9 -mmt=2 -p myarchive.zip bigfile.txt
I to kończy się niepowodzeniem z błędem:
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.
źródło
źródło
-mmt
nieprawda-mmt=2
. Uważam również, że właściwa składnia jest-mx9
, chociaż oba mogą działać.Odpowiedzi:
Zgodnie z opcją -m (Ustaw metodę kompresji) przełącznik # ZipMultiThread - instrukcja i dokumentacja 7ZIP ,
mt
domyślnie ustawionaon
, więc nie trzeba jej wcale określać.Jednak implementacja algorytmu DEFLATE w 7zip nie obsługuje wielowątkowości!
Jak już odkryłeś,
używa tylko jednego rdzenia.
Ale
.zip
pliki kompresują każdy plik osobno. Podczas kompresji kilku plików opcja wielowątkowości kompresuje jeden plik na rdzeń jednocześnie.Wypróbuj, a zobaczysz to
użyje wszystkich dostępnych
N
rdzeni.Jeśli chcesz przyspieszyć kompresję pojedynczego pliku, masz dwie możliwości:
Podzielony
bigfile
na części.Użyj innego algorytmu kompresji.
Na przykład implementacja algorytmu BZip2 przez 7zip obsługuje wielowątkowość.
Składnia jest następująca:
Błąd składniowy jest również spowodowany próbą użycia algorytmu LZM dla
.zip
kontenera. To nie jest możliwe.Możliwe algorytmy dla
.zip
konatynatorów to DEFLATE (64), BZip2 i brak kompresji.Jeśli chcesz użyć algorytmu LZM, użyj
.7z
kontenera. Ten kontener obsługuje również następujące algorytmy: PPMd, BZip2, DEFLATE, BCJ, BCJ2 i bez kompresji.źródło
.zip
kontenerem..ZIP
kontenera.To jest stare pytanie, a nie odpowiedź na konkretne pytanie, ale odpowiedź na ducha pytania (użycie wszystkich rdzeni do skompresowania formatu zip)
pigz (równoległy gzip z opcją .zip)
Zapewni to 7-krotnie szybszy plik zgodny z formatem zip dla tego samego poziomu kompresji.
Szybkie porównanie kompresorów z zamkiem błyskawicznym i bez kompresora z użyciem pojedynczego i wielu rdzeni.
razy na ścianie w i7-2600k, aby skompresować plik TXT o pojemności 1,0 GB na Fedorze 20
czasy ścian do dekompresji
źródło
Wystarczy użyć -mmt [N + 1]
Na przykład: -mmt2 jest dla jednego wątku, -mmt9 jest dla ośmiu wątków
źródło
Zweryfikowane i przetestowane: Aby korzystać z wielowątkowości na 7za, parametr musi mieć wartość „-mmt #” not ”-mmt = #”, umieszczenie znaku równości powoduje ignorowanie.
Jak odkryłem? Po uruchomieniu 7z bez żadnego parametru wyświetla informacje o parametrach, na przełącznikach mówi „-mmt [N]”, a nie „-mmt = [N]”
Więc jeśli dobrze rozumiem, parametr, który wpisujesz „-mmt = 2” może być źle zapisany i może być „-mmt2”, bez znaku równości.
Nie jestem pewien, czy dobrze rozumiem, mój angielski jest naprawdę słaby.
Nawiasem mówiąc, dlaczego używasz „7za” zamiast po prostu „7z”?
Aby przetestować parametr, uruchomiłem zestaw poleceń, aby wykonać testy porównawcze, co potwierdziło błąd literowy w dokumentacji. Prawidłowy parametr należy wpisać bez znaku równości.
Polecenie wykonania testu porównawczego z 7z z tylko jednym wątkiem: 7z b-mmt1
Polecenie wykonania testu porównawczego z 7z z tylko dwoma wątkami: 7z b-mmt2
Polecenie wykonania testu porównawczego z 7za z tylko dwoma wątkami: 7za b-mmt2
Polecenie wykonania testu porównawczego z 7za z tylko jednym wątkiem: 7za b -mmt1
Nie ma znaku równości w parametrze ˋ-mmt # ˋ, ani dla 7z, ani 7za.
źródło