Ferramentas de compactação multi-core

48

O ferramentas de compressão estão disponíveis no Ubuntu e podem se beneficiar de uma CPU multi-core.

    
por Luis Alvarado 19.02.2013 / 13:50

8 respostas

26

Existem duas ferramentas principais. lbzip2 e pbzip2 . Eles são essencialmente diferentes implementações de compressores bzip2. Eu os comparei (a saída é uma versão arrumada, mas você deve ser capaz de executar os comandos)

cd /dev/shm  # we do all of this in RAM!
dd if=/dev/urandom of=bigfile bs=1024 count=102400

$ lbzip2 -zk bigfile 
Time: 0m3.596s
Size: 105335428 

$ pbzip2 -zk bigfile
Time: 0m5.738s6
Size: 10532460

lbzip2 parece ser o vencedor em dados aleatórios. É um pouco menos comprimido, mas muito mais rápido. YMMV.

    
por Oli 19.02.2013 / 14:14
63

Bem, a palavra-chave era paralela . Depois de procurar por todas as ferramentas de compactação que também eram paralelas , encontrei o seguinte:

PXZ - O Parallel XZ é um utilitário de compactação que aproveita a execução do LZMA compressão de diferentes partes de um arquivo de entrada em vários núcleos e processadores simultaneamente. Seu objetivo principal é utilizar todos os recursos para Acelerar o tempo de compactação com o mínimo possível de influência na compactação relação.

sudo apt-get install pxz

PLZIP - O Lzip é um compressor de dados sem perdas baseado no algoritmo LZMA, com muito segurança verificação de integridade e uma interface de usuário semelhante à do gzip ou bzip2. O Lzip descompacta quase tão rápido quanto o gzip e comprime melhor que o bzip2, o que o torna adequado para distribuição de software e arquivamento de dados.

O Plzip é uma versão massivamente paralela (multi-threaded) do lzip usando o lzip formato de arquivo; os arquivos produzidos pelo plzip são totalmente compatíveis com o lzip.

O Plzip é destinado a compactação / descompactação mais rápida de arquivos grandes máquinas multiprocessadas, o que a torna especialmente adequada para distribuição de grandes arquivos de software e arquivamento de dados em larga escala. Nos arquivos grandes o suficiente, O plzip pode usar centenas de processadores.

sudo apt-get install plzip

PIGZ - pigz, que significa Implementação Paralela do GZip, é totalmente funcional substituição para gzip que aproveita vários processadores e múltiplos núcleos ao compactar dados.

sudo apt-get install pigz

PBZIP2 - pbzip2 é uma implementação paralela do arquivo de classificação de blocos bzip2 compressor que usa pthreads e alcança speedup quase linear no SMP máquinas. A saída desta versão é totalmente compatível com o bzip2 v1.0.2 (ou seja: qualquer coisa compactada com pbzip2 pode ser descompactada com bzip2).

sudo apt-get install pbzip2

LRZIP - Um programa de compactação multithread que pode atingir uma compactação muito alta taxas e velocidade quando usado com arquivos grandes. Ele usa o combinado algoritmos de compressão de zpaq e lzma para compressão máxima, lzo para velocidade máxima e redução de redundância de longo alcance do rzip. Ele é projetado para escalar com aumentos com o tamanho da RAM, melhorando compressão ainda mais. Uma escolha de otimizações de tamanho ou velocidade permite melhor compressão do que o lzma pode fornecer, ou melhor velocidade do que o gzip, mas com níveis de compressão do tamanho do bzip2.

sudo apt-get install lrzip

Um pequeno Benchmark de compactação (usando o teste que o Oli criou):

TAMANHO DO ARQUIVO ORIGINAL - 100 MB
PBZIP2 - 101 MB (1% maior)
PXZ - 101 MB (1% maior)
PLZIP - 102 MB (1% maior)
LRZIP - 101 MB (1% maior)
PIGZ - 101 MB (1% maior)

Um pequeno benchmark de compactação (usando um arquivo de texto):

TAMANHO DO ARQUIVO ORIGINAL - 70 KB Arquivo de Texto
PBZIP2 - 16,1 KB (23%)
PXZ - 15,4 KB (22%)
PLZIP - 15,5 KB (22,1%)
LRZIP - 15,3 KB (21,8%)
PIGZ - 17,4 KB (24,8%)

    
por Luis Alvarado 19.02.2013 / 15:22
9

Além do bom resumo acima (obrigado Luis), hoje em dia as pessoas também podem querer considerar o PIXZ, que de acordo com o README (fonte: link - Eu mesmo não verifiquei as reivindicações) tem algumas vantagens sobre o PXZ.

[Compared to PIXZ, PXZ has these advantages and disadvantages:]

    * Simpler code
    * Uses OpenMP instead of pthreads
    * Uses streams instead of blocks, not indexable
    * Uses temp files and doesn't combine them until the whole file is compressed, high disk/memory usage

Em outras palavras, o PIXZ é supostamente mais eficiente em termos de memória e disco, e possui um recurso de indexação opcional que acelera a descompactação de componentes individuais de arquivos tar compactados.

    
por nturner 14.12.2013 / 20:56
5

Atualização:

XZ Utils suporta compressão multi-threaded desde v5.2.0, foi originalmente erroneamente documentado como sendo uma descompressão multi-thread.

Por exemplo: tar -cf - source | xz --threads=0 > destination.tar.xz

    
por donbradken 09.12.2016 / 16:33
4

lzop também pode ser uma opção viável, embora é single-threaded.

Ele usa o muito rápido lempel-ziv -oberhumer algoritmo de compressão que é 5-6 vezes mais rápido que gzip na minha observação.

Nota: Embora ainda não seja multi-threaded, provavelmente superará o pigz em sistemas centrais 1-4. É por isso que decidi postar isso mesmo que não responda diretamente à sua pergunta. Experimente, pode resolver o problema de afunilamento da sua CPU enquanto usa apenas uma CPU e comprime um pouco pior. Eu acho que muitas vezes é uma solução melhor do que, por exemplo, pigz.

    
por ce4 25.02.2014 / 13:48
3

O compressor LZMA2 do p7zip usa os dois núcleos no meu sistema.

    
por David Foerster 14.12.2013 / 23:35
1
O

Zstandard suporta multi-threading desde v1.2.0 ¹. É um compressor e descompressor muito rápido destinado a substituir o gzip e pode também ser tão eficiente - se não melhor - quanto o LZMA2 / XZ em seus níveis mais altos.

Você precisa usar arte ou uma versão mais recente ou compilar a versão mais recente da fonte para obter esses benefícios. Felizmente, não envolve muitas dependências.

  1. Também havia um pzstd de terceiros na v1.1.0 do zstd.
por LiveWireBT 26.07.2017 / 22:17
1

Não é realmente uma resposta, mas acho que é relevante o suficiente para compartilhar meus comparativos comparando a velocidade de gzip e pigz em um HW real em um cenário da vida real. Como pigz é a evolução multithreaded que eu pessoalmente escolhi usar a partir de agora.

Metadados:

  • Hardware usado: Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz (4c / 8t) + Nvme SSD
  • Distribuição GNU / Linux: Xubuntu 17.10 (artful)
  • gzip versão: 1.6
  • pigz versão: 2.4
  • O arquivo que está sendo compactado é 9.25 GiB SQL dump

gzip quick

time gzip -1kN ./db_dump.sql

real    1m22,271s
user    1m17,738s
sys     0m3,330s

gzip melhor

time gzip -9kN ./db_dump.sql 

real    10m6,709s
user    10m2,710s
sys     0m3,828s

pigz quick

time pigz -1kMN ./db_dump.sql 

real    0m26,610s
user    1m55,389s
sys     0m6,175s

pigz melhor (sem zopfli )

time pigz -9kMN ./db_dump.sql 

real    1m54,383s
user    14m30,435s
sys     0m5,562s

pigz + zopfli algoritmo

time pigz -11kMN ./db_dump.sql 

real    171m33,501s
user    1321m36,144s
sys     0m29,780s

Como bottomline, eu não recomendaria o algoritmo zopfli , já que a compactação levou uma quantidade enorme de tempo para uma quantidade não-significativa de espaço em disco poupada.

Tamanhos dos arquivos resultantes:

  • melhor s: 1309M
  • rápido s: 1680M
  • zopfli : 1180M
por helvete 19.01.2018 / 16:39