
(Postei isso primeiro no serverfault, mas depois percebi que provavelmente pertence aqui.)
Estou tentando compactar um arquivo de texto muito grande usando 7za (p7zip) 9.20. A opção -mmt não parece ter nenhum efeito. Eu tentei -mmt=on e -mmt=2. Esta é uma máquina de 8 núcleos. Uma pessoa sugeriu adicionar -m0=lzma2 como argumento, mas isso só me dá E_INVALIDARG. Alguém sabe como fazer isso funcionar?
Isso não tem efeito:
7za a -mx=9 -mmt=2 -p myarchive.zip bigfile.txt
E isso falha com um erro:
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
Responder1
De acordo com-m (Definir método de compactação) switch # ZipMultiThread - manual e documentação do 7ZIP, mt
o padrão é on
, portanto não há necessidade de especificá-lo.
No entanto, a implementação do algoritmo DEFLATE do 7zip não suporta multi-threading!
Como você já descobriu,
7za a archive.zip bigfile
usa apenas um núcleo.
Mas .zip
os arquivos compactam cada arquivo individualmente. Ao compactardiversosarquivos, a opção multithreading compacta um arquivo por núcleo de uma só vez.
Experimente e você verá isso
7za a archive.zip bigfile1 ... bigfileN
usará todos N
os núcleos disponíveis.
Se você quiser acelerar a compactação de umsolteiroarquivo, você tem duas opções:
Divida
bigfile
em pedaços.Use um algoritmo de compactação diferente.
Por exemplo, a implementação do algoritmo BZip2 pelo 7zip oferece suporte a multithreading.
A sintaxe é:
7za a -mm=BZip2 archive.zip bigfile
Além disso, o erro de sintaxe é causado pela sua tentativa de usar o algoritmo LZM para um .zip
contêiner. Isso não é possível.
Os algoritmos possíveis para .zip
conatiners são DEFLATE(64), BZip2 e sem compressão.
Se você quiser usar o algoritmo LZM, use um .7z
contêiner. Este contêiner também lida com os seguintes algoritmos: PPMd, BZip2, DEFLATE, BCJ, BCJ2 e sem compactação.
Responder2
Esta é uma pergunta antiga, e não a resposta para uma pergunta específica, mas uma resposta ao espírito da pergunta (Usando todos os núcleos para compactar um formato zip)
pigz (gzip paralelo com opção .zip)
pigz -K -k archive.zip bigfile txt
Isso fornecerá um arquivo compatível com zip 7x mais rápido para o mesmo nível de compactação.
Comparações rápidas de compressores zip compatíveis e não zip usando núcleos únicos e múltiplos.
tempos de parede no i7-2600k para compactar arquivo txt de 1,0 GB no Fedora 20
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)
tempos de parede para descomprimir
4.2s unzip -t
2.0s pigz -t
5.1s bsc d
0.5s zhuff -d
Responder3
Outra opção para obter compactação multifacetada no Linux é usar o que o Facebook usa,Zpadrão. No Ubuntu, você instala assim:
sudo apt install zstd
Compressão multithread super rápida:
tar cf - /folder/you/want/to/compress | zstdmt -o /location/to/output/fileName$(date '+%Y-%m-%d_%H:%M:%S').tar.zst
Você pode especificar os níveis de compactação de 1 a 19 (3 é o padrão).
Compressão máxima (mais lenta):
tar cf - /folder/you/want/to/compress | zstdmt -19 -o /location/to/output/fileName$(date '+%Y-%m-%d_%H:%M:%S').tar.zst
Compressão média (nível 10):
tar cf - /folder/you/want/to/compress | zstdmt -10 -o /location/to/output/fileName$(date '+%Y-%m-%d_%H:%M:%S').tar.zst
Minha experiência geral é que a compactação Zstandard não é tão forte quanto o 7zip, mas é muito mais rápida e o zstdmt
comando tenta usar todos os núcleos.
Aliás, no Windows, o 7zip usa todos os processadores por padrão e estou muito desapontado que esse não seja o caso no Linux. Tem sido assim há vários anos, neste momento, e eu gostaria que o 7zip fosse multithread por padrão no Linux também.
Responder4
Basta usar -mmt[N+1]
Por exemplo: -mmt2 é para um thread, -mmt9 é para oito threads