(이것은 serverfault에 처음 게시했지만 여기에 속하는 것 같습니다.)
7za (p7zip) 9.20을 사용하여 매우 큰 텍스트 파일을 압축하려고합니다. -mmt 옵션은 효과가없는 것 같습니다. -mmt = on과 -mmt = 2를 모두 시도했습니다. 이것은 8 코어 머신입니다. 한 사람이 -m0 = lzma2를 인수로 추가하도록 제안했지만 E_INVALIDARG를 제공합니다. 이 작업을 수행하는 방법을 아는 사람이 있습니까?
이것은 효과가 없습니다 :
7za a -mx=9 -mmt=2 -p myarchive.zip bigfile.txt
그리고 이것은 오류와 함께 실패합니다.
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
답변
에 따르면 -m (설정 압축 방법) 스위치 # ZipMultiThread – 7zip과 매뉴얼 및 문서 , mt
기본값 on
, 그래서 전혀를 지정할 필요가 없습니다.
그러나 7zip의 DEFLATE 알고리즘 구현은 멀티 스레딩을 지원하지 않습니다!
이미 발견했듯이
7za a archive.zip bigfile
하나의 코어 만 사용합니다.
그러나 .zip
파일은 모든 파일을 개별적으로 압축합니다. 여러 파일을 압축 할 때 멀티 스레딩 옵션은 코어 당 한 파일을 한 번에 압축합니다.
그것을 시도하고 당신은 그것을 볼 수 있습니다
7za a archive.zip bigfile1 ... bigfileN
사용 가능한 모든 N
코어 를 사용합니다 .
단일 파일 의 압축 속도를 높이려면 다음 두 가지 중에서 선택할 수 있습니다.
-
분할
bigfile
덩어리. -
다른 압축 알고리즘을 사용하십시오.
예를 들어, 7zip의 BZip2 알고리즘 구현은 멀티 스레딩을 지원합니다.
구문은 다음과 같습니다.
7za a -mm=BZip2 archive.zip bigfile
또한 .zip
컨테이너에 LZM 알고리즘을 사용하려고하면 구문 오류가 발생합니다 . 그건 불가능하다.
.zip
코나 티너에 가능한 알고리즘 은 DEFLATE (64), BZip2이며 압축되지 않습니다.
LZM 알고리즘을 사용하려면 .7z
컨테이너를 사용하십시오 . 이 컨테이너는 PPMd, BZip2, DEFLATE, BCJ, BCJ2 및 압축되지 않은 알고리즘도 처리합니다.
답변
이것은 오래된 질문이며 특정 질문에 대한 답변이 아니라 질문의 정신에 대한 답변입니다 (모든 코어를 사용하여 zip 형식 압축)
pigz (.zip 옵션이있는 병렬 gzip)
pigz -K -k archive.zip bigfile txt
이렇게하면 동일한 압축 수준에서 7 배 더 빠른 zip 호환 파일이 제공됩니다.
단일 및 다중 코어를 사용하는 zip 호환 및 비 -zip 압축기의 빠른 비교.
fedora 20에서 1.0gb txt 파일을 압축하는 i7-2600k의 월 타임
67s (120mb) 7za (zip,1 thread)
15s (141mb) 7za -mx=4 (zip,1 thread)
17s (132mb) zip (zip,1 thread)
5s (131mb) pigz -K -k (zip,8 threads)
9s (106mb) bsc (libbsc.com) (not zip,8 threads)
5s (130mb) zhuff -c2 (not zip,8 threads)
2s (149mb) zhuff (not zip,8 threads)
압축을 풀기위한 벽 시간
4.2s unzip -t
2.0s pigz -t
5.1s bsc d
0.5s zhuff -d
답변
-mmt [N + 1]을 사용하십시오.
예를 들면 다음과 같습니다. -mmt2는 하나의 스레드이고 -mmt9는 8 개의 스레드입니다.
답변
확인 및 테스트 : 7za에서 멀티 스레딩을 사용하려면 매개 변수는 “-mmt = #”이 아니라 “-mmt #”이어야합니다. 등호를 넣으면 무시됩니다.
내가 어떻게 발견 했습니까? 매개 변수없이 7z를 실행하면 매개 변수에 대한 정보가 표시되고 스위치에서 “-mmt = [N]”이 아니라 “-mmt [N]”이라고 표시됩니다.
따라서 잘 이해하면 “-mmt = 2″를 입력하는 매개 변수가 등호없이 입력되지 않거나 “-mmt2″일 수 있습니다.
내가 잘 이해하는지 확실하지 않으면, 나의 영어는 정말로 가난합니다.
그런데 왜 “7z”대신 “7za”를 사용합니까?
그래서 매개 변수를 테스트하기 위해 벤치 마크를 수행하는 명령 세트를 실행하고 일부 문서에서 오타 오류를 확인했습니다. 등호없이 올바른 매개 변수를 입력해야합니다.
스레드가 하나만있는 7z에서 벤치 마크를 수행하는 명령 : 7z b -mmt1
스레드가 2 개인 7z에서 벤치 마크를 수행하는 명령 : 7z b -mmt2
스레드가 2 개인 7za에서 벤치 마크를 수행하는 명령 : 7za b -mmt2
스레드가 하나만있는 7za에서 벤치 마크를 수행하는 명령 : 7za b -mmt1
ˋ-mmt # ˋ 매개 변수에는 등호가 없으며 7z 또는 7za에는 없습니다.