(Publiquei isso primeiro em serverfault, mas depois percebi que provavelmente pertence aqui.)
Estou tentando compactar um arquivo de texto muito grande usando o 7za (p7zip) 9.20. A opção -mmt parece não ter nenhum efeito. Eu tentei ambos -mmt = on e -mmt = 2. Esta é uma máquina de 8 núcleos. Uma pessoa sugeriu adicionar -m0 = lzma2 como argumento, mas isso 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
linux
compression
7-zip
Brian L
fonte
fonte
-mmt
, não-mmt=2
. Também acredito que a sintaxe adequada seja-mx9
, embora ambas possam funcionar.Respostas:
De acordo com a opção -m (Definir método de compactação), # ZipMultiThread - manual e documentação do 7ZIP , o
mt
padrão éon
, portanto, não há necessidade de especificá-lo.No entanto, a implementação do algoritmo DEFLATE pelo 7zip não suporta multi-threading!
Como você já descobriu,
usa apenas um núcleo.
Mas os
.zip
arquivos compactam todos os arquivos individualmente. Ao compactar vários arquivos, a opção multiencadeamento comprime um arquivo por núcleo de uma vez.Experimente e você verá isso
usará todos os
N
núcleos disponíveis .Se você deseja acelerar a compactação de um único arquivo, tem duas opções:
Dividir
bigfile
em pedaços.Use um algoritmo de compactação diferente.
Por exemplo, a implementação do algoritmo BZip2 por 7zip suporta multi-threading.
A sintaxe é:
Além disso, o erro de sintaxe é causado por sua tentativa de usar o algoritmo LZM para um
.zip
contêiner. Isso não é possível.Os possíveis algoritmos para
.zip
conatinadores são DEFLATE (64), BZip2 e sem compactação.Se você deseja 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.fonte
.zip
contêiner..ZIP
contêiner.Essa é uma pergunta antiga, e não a resposta para a pergunta específica, mas uma resposta para o espírito da pergunta (usando todos os núcleos para compactar um formato zip)
pigz (gzip paralelo com opção .zip)
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 compatíveis com e sem zip, usando um e vários núcleos.
tempos de parede no i7-2600k para compactar o arquivo txt de 1,0gb no fedora 20
tempos de parede para descomprimir
fonte
Apenas use -mmt [N + 1]
Por exemplo: -mmt2 é para um encadeamento, -mmt9 é para oito encadeamentos
fonte
Verificado e testado: Para usar o multithreading no 7za, o parâmetro deve ser "-mmt #" not "-mmt = #", colocando o sinal de igual faz com que seja ignorado.
Como eu descobri? Depois de executar o 7z sem nenhum parâmetro, ele mostra as informações sobre os parâmetros; nos comutadores, ele diz "-mmt [N]", não "-mmt = [N]"
Então, se eu entendi bem, o parâmetro que você está digitando "-mmt = 2" pode estar errado e pode ser "-mmt2", sem o sinal de igual.
Não sei se entendi bem, meu inglês é muito ruim.
A propósito, por que você usa "7za" em vez de apenas "7z"?
Então, para testar o parâmetro, eu executo um conjunto de comandos para fazer benchmarks e isso confirmou o erro de digitação em alguma documentação. O parâmetro correto deve ser digitado sem o sinal de igual.
Comando para fazer um benchmark com 7z com apenas um thread: 7z b -mmt1
Comando para fazer um benchmark com 7z com apenas dois threads: 7z b -mmt2
Comando para fazer um benchmark com o 7za com apenas dois threads: 7za b -mmt2
Comando para fazer um benchmark com o 7za com apenas um thread: 7za b -mmt1
Não há sinal de igual no parâmetro mm-mmt # ˋ, nem para 7z nem 7za.
fonte