Como tornar o 7-Zip mais rápido

35

Eu normalmente uso o WinRAR sobre o 7-Zip simplesmente porque é mais rápido e apenas um pouco menos eficiente com a compactação. Fiz alguns testes em diferentes tipos e tamanhos de arquivo comparando as configurações padrão do 7-Zip e WinRAR em sua compactação normal e sua melhor compactação e, em muitos casos, o WinRAR foi 50% mais rápido e, em alguns, na verdade, 100% mais rápido. Mas gosto mais de software livre. Então, aqui estão as minhas questões:

  1. Existe uma maneira de acelerar o 7-Zip? Eu gostaria que fosse pelo menos compatível com a velocidade do WinRAR
  2. Existe uma maneira de criar segmentos de recuperação no 7-Zip como você pode no WinRAR? Não vi nenhum, mas acho que poderia ser uma coisa da linha de comando.
  3. Testei o WinRAR e o 7-Zip usando a versão estável mais recente de cada um (4-dot-something with 7-Zip). A versão beta 9.x é visivelmente mais rápida na compactação?

Estou falando mais rápido em uma configuração comparável no WinRAR, não apenas diminuindo para a compactação mínima.

Se isso importa, eu uso um Intel i7 720 (1.6 GHz) / (2.8 GHz) quad core com 4 GB de RAM DDR3 e a versão de 64 bits do 7-Zip e Debian x64 5.0.4 e Windows 7 de inicialização dupla. Casa.

Kefka
fonte
1
No que diz respeito ao número 2 - 7-zip atualmente, não possui nenhum tipo de capacidade de "registro de recuperação" ou "ecc". Você precisará de software de terceiros, como QuickPar / MultiPar ou ICE ECC, mas não fará parte do arquivo.
afrazier 25/05

Respostas:

36

Se você adquirir o 7-Zip 9.13 beta, poderá alterar o tipo de arquivo para LZMA2 e, assim, poder usar quantos threads desejar, embora o uso da memória seja fenomenal.

Instale a versão beta, clique com o botão direito do mouse no material que deseja arquivar e, no menu 7-Zip, clique em "Adicionar ao arquivo ..." e você obterá algo semelhante à janela abaixo. No lado esquerdo, em Método de compactação, você encontrará "LZMA2", que permitirá alterar o número de threads, que será uma opção um pouco mais abaixo.

Isso tem o potencial de aumentar enormemente o desempenho em> 2 processadores principais, pois pode ser melhor ajustado ao seu sistema, e o método de compactação normal pode lidar apenas com 2 threads no máximo.

O "/ 1" que você vê à direita da caixa de seleção de número de threads na imagem é o número de processadores em seu sistema e, portanto, o número recomendado de threads. Meu i7 é um processador quad core, mas possui hyperthreading (o que realmente ajuda aqui, aliás), então é exibido como "/ 8"

texto alternativo

Mokubai
fonte
O Anandtech.com tem usado o 7-Zip para ajudar a comparar os aprimoramentos de desempenho encontrados em CPUs com vários núcleos e com vários threads, o que, de outra forma, é mais teórico na maioria dos softwares desta geração.
kmarsh
5
Qual é a linha de comando arg para ativar o LZMA2?
djangofan
@Monkubai: No i7 4c-8t do meu escritório, não consigo rodar o 7-zip completo com 8 núcleos no modo LZMA2, independentemente da configuração definida. O único método que permite que ele execute todos os 8 threads é usar o algoritmo BZip2 (no menu suspenso) que possui uma taxa de compactação mais baixa.
Edward
@ Edward que versão você está usando? Na 9.20, se eu selecionar lzma2 nessa lista, tenho a opção de usar até 8 núcleos.
Mokubai
2
@Mokubai 9.20 versão oficial. E não há nada de errado com a interface gráfica do usuário, ele ainda exibe o parâmetro 8/8 núcleos no painel de configuração, mas ao processá-lo, na verdade, usa apenas <20% da CPU. Fiz uma pesquisa rápida no SU para o problema, mas ainda não descobri o motivo dessa questão. Só sei que se eu usar a linha de comando 7z com parâmetros como -m0 = lzma2 -mmt = 8, a compactação ultiliza ~ 100% da CPU, mas uma vez que mudo para GUI, ela retorna ao modo de thread único ou algo parecido ... faça uso da CPU de maneira muito ineficiente (<20%).
Edward
31

Como cada encadeamento parece compactar vários arquivos ao mesmo tempo, a melhor coisa que você pode fazer para aumentar o desempenho de trabalhos zip muito grandes é definir encadeamentos como 1, para garantir que seu disco rígido procure um arquivo por vez.

Melhoramos o desempenho em todos os nossos procedimentos diários de backup zip, adicionando -mmt=offà linha de comando 7-zip. Nosso backup do "repositório SVN visual", que é feito a partir de vários arquivos pequenos, levou entre 50 e 60 minutos.

Com -mmt=off, agora fazemos sempre em menos de cinco minutos! E, durante esses 50 minutos, todos os nossos servidores ficaram muito lentos devido à procura dos discos rígidos. Agora, tudo permanece muito rápido durante esses cinco minutos.

Para tudo o que você faz em uma máquina, a atividade do disco rígido sempre será mais lenta que a capacidade da CPU. Você pode aumentar o desempenho do disco desativando as atividades paralelas e certificando-se de que o disco rígido leia (e grave) seus arquivos um a um em série.

Também é melhor ler do disco1 e gravar seu ZIP no disco2, pois o cabeçote físico não se move da leitura para a gravação.

Exemplo de linha para obter a velocidade máxima do ZIP, mantendo o desempenho da sua máquina:

start "" /wait /belownormal c:\Progra~1\7-Zip\7z.exe a -tzip -mx=1 -mmt=off t:\backup.zip d:\folderToBackup\*

D:e T:são 2 discos físicos diferentes

Frederic Malenfant
fonte
5
Surpreendente que esse seja exatamente o oposto da resposta sugerida, mas na verdade esteja correto. Acabei de fazer uma operação de arquivamento passar de 12 horas para 2, passando a usar um único encadeamento.
N Jones
2
Verdade. Isso funcionou para mim também. Provavelmente faz sentido porque ele está usando -mx=1(o que quase não é compactação). Se você não está compactando, a maior parte do trabalho é feita pelo HDD. Se você configurar -mx=9os processadores, realmente precisará trabalhar para compactar o arquivo. Eu precisaria tentar, mas, dependendo do gargalo (HDD ou CPU), pode ser melhor ou pior.
Diego Jancic
9
Essa resposta é muito específica para uma tecnologia antiga. Provavelmente não é útil tentar fazer isso com SSDs porque o tempo de busca é muito menor. É menos provável que o IOPS aleatório seja o gargalo. Seu caso foi bem especial porque você estava executando muito pouca compactação. Basicamente, você estava fazendo uma cópia do arquivo. Então, sim, o acesso seqüencial em um HD giratório é claramente um vencedor. Os casos típicos de 7 zip provavelmente serão vinculados à CPU, não IO. Para isso, é essencial usar todos os núcleos da CPU. Mas para aqueles em situação semelhante, seu conselho é muito valioso.
dss539
1
O uso -mmt=offé mais rápido, mesmo com -m0=lzma2 -mx=5. (Sem -mmt=off: 1m27.811s reais, 2m4.976s usuário, 0m3.729s sys . Com -mmt=off: 1m18.896s reais, 1m17.160s usuário, sys 0m1.661s )
ostrokach
Parece ser muito mais lento diminuir o número de threads para 1. Com 1 thread para 20 GB de arquivos, ele estava processando a uma velocidade de cerca de 2 MB / s. Com 16 threads, ele estava sendo processado a uma velocidade de 16 MB / s.
Lightyear Buzz
0

Todos os algoritmos de compactação que usei recentemente (ZIP, RAR, 7z, tar / bzip2) são vinculados à E / S, não à CPU. Assistir ao MenuMeters no meu laptop Mac mostra atividade constante do disco, mas apenas 50% ou menos da CPU.

Assim, a maneira de acelerar a compactação / descompactação é acelerar o seu disco. Isso nem sempre é possível.

Minha "solução" para isso é apenas fazer outra coisa enquanto estou compactando alguma coisa. :-)

chrish
fonte
2
Se a E / S do disco for um problema de Matt, isso significa que o WinRAR é capaz de ler do disco mais rapidamente que o 7Zip em seu sistema ... Isso me parece improvável.
fora do
1
É possível que o WinRAR use E / S de disco mais inteligentes; Eu sei que o zip do Info-ZIP é dificultado por seus buffers de E / S realmente pequenos. Mas sim, pode haver uma diferença entre os algoritmos de compactação.
chrish 27/05
O 7z certamente não está ligado à E / S, mesmo no modo rápido.
Sarge Borsch
A maioria dos métodos que você descreveu não compacta em paralelo, portanto, apenas 1 núcleo da sua CPU é usado, portanto, em uma máquina com 2 núcleos, você obtém 50%. Receio que a CPU esteja ligada ao seu mac, não a IO, e a maioria dos macs tem SSD que realmente não sofre com a procura de disco. O 7z pode compactar em paralelo se você escolher a opção. (TAR, ZIP, bzip, gzip, xs geralmente não)
Martin
0

Na minha empresa, estamos trabalhando com uma versão antiga do 7-zip (4.52 beta) e executando o seguinte comando:

"C:\Program Files\7-Zip\7z.exe" a -mx7 -mmt -sfx -xr!*.<exclude_extension> <destination>.exe <source_directory>\* 

Isso está funcionando bem, mas depois de ter atualizado para a versão mais recente 16.04 (32 bits), o desempenho caiu enormemente, por isso decidi fazer o downgrade novamente para a versão antiga.

Dominique
fonte
0

Outro pequeno truque para melhorar o desempenho quando você usa código como este exemplo:

$7zip = "$env:ProgramFiles\7-Zip\7z.exe"
set-alias sz $7zip
$FileZip = "$DiscoZip\temp\$TempFile"
foreach ($DirData in $ListDir) { $out7z = (sz a $FileZip $DirData) }

é, se possível, ter na matriz $ ListDir listado os diretórios por tamanho, do menor ao maior. Isso acontece porque, em cada ciclo foreach, o 7zip cria um arquivo temporário que é tão grande (ou maior) que o original e, em seguida, adiciona um novo arquivo dentro deles. Eu tentei com casos em que existem dois ou mais diretórios com alguns MB e um com muitos GB e a economia de tempo é da ordem de vários minutos.

Max Monterumisi
fonte
Acredito que isso só se aplica ao adicionar arquivos a um arquivo existente. Ao adicionar vários arquivos de uma só vez, apenas um arquivo temporário seria usado. Ao criar um novo arquivo morto, um arquivo temporário não seria usado.
Daniel B
-1

Meu palpite é que acelerar o 7-Zip é impossível sem reescrever seus algoritmos de compactação / descompactação; pode haver algum tipo de ajuste que aumenta a velocidade, mas provavelmente será apenas um aumento de 10 ou 15%, não um grande aumento. 50-100% de aumento que você está procurando.

Joshkunz
fonte
6
Não é verdade. Você pode acelerar enormemente o 7-zip alterando-o das configurações padrão. De fato, as configurações padrão são ajustadas para o menor tamanho de arquivo (e o algoritmo de compactação mais lento - BZip2). Alterando-o para ZIP e a compactação LZMA definida como "Mais rápida", torna-a extremamente mais rápida.
24515 NickG