
(저는 이것을 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
답변1
에 따르면-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
또한 컨테이너에 LZM 알고리즘을 사용하려고 하면 구문 오류가 발생합니다 .zip
. 그건 불가능하다.
컨테이너 에 가능한 알고리즘은 .zip
DEFLATE(64), BZip2 및 비압축입니다.
LZM 알고리즘을 사용하려면 .7z
컨테이너를 사용하세요. 이 컨테이너는 PPMd, BZip2, DEFLATE, BCJ, BCJ2 및 비압축 알고리즘도 처리합니다.
답변2
이것은 오래된 질문이며 특정 질문에 대한 답변이 아니라 질문의 정신에 대한 답변입니다(모든 코어를 사용하여 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
답변3
Linux에서 다중 스레드 압축을 달성하기 위한 또 다른 옵션은 Facebook이 사용하는 것을 사용하는 것입니다.Z표준. Ubuntu에서는 다음과 같이 설치합니다.
sudo apt install zstd
초고속 멀티스레드 압축:
tar cf - /folder/you/want/to/compress | zstdmt -o /location/to/output/fileName$(date '+%Y-%m-%d_%H:%M:%S').tar.zst
압축 수준은 1~19(기본값은 3)로 지정할 수 있습니다.
최대 압축(가장 느림):
tar cf - /folder/you/want/to/compress | zstdmt -19 -o /location/to/output/fileName$(date '+%Y-%m-%d_%H:%M:%S').tar.zst
중간 압축(레벨 10):
tar cf - /folder/you/want/to/compress | zstdmt -10 -o /location/to/output/fileName$(date '+%Y-%m-%d_%H:%M:%S').tar.zst
내 전반적인 경험은 Zstandard 압축이 7zip만큼 강력하지는 않지만 훨씬 빠르고 명령이 zstdmt
모든 코어를 사용하려고 시도한다는 것입니다.
그런데 Window에서 7zip은 기본적으로 모든 프로세서를 사용하는데 Linux에서는 그렇지 않다는 점이 매우 실망스럽습니다. 이 시점에서 몇 년 동안 이런 식으로 진행되었으며 Linux에서도 7zip이 기본적으로 멀티 스레드였으면 좋겠습니다.
답변4
그냥 -mmt[N+1]을 사용하세요
예를 들어 -mmt2는 1개의 스레드에 대한 것이고, -mmt9는 8개의 스레드에 대한 것입니다.