Quais ferramentas de compactação estão disponíveis no Ubuntu que podem se beneficiar de uma CPU com vários núcleos.
compression
multi-core
Luis Alvarado
fonte
fonte
Respostas:
Existem duas ferramentas principais.
lbzip2
epbzip2
. São implementações essencialmente diferentes de compressores bzip2. Comparei-os (a saída é uma versão arrumada, mas você deve poder executar os comandos)lbzip2
parece ser o vencedor em dados aleatórios. É um pouco menos compactado, mas muito mais rápido. YMMV.fonte
/dev/urandom
não é uma ótima opção de entrada para ferramentas de compactação de benchmarking, pois dados aleatórios são, por definição, incompressíveis. Isso explica em parte porque nos dois casos o arquivo de saída é ~ 450MiB maior que a entrada.00000000000000000000000000000000
. É assim que funciona aleatoriamente;) O que você está falando são médias práticas. É improvável que você gere um arquivo de 100 MB apenas com zeros. E eu concordo com o espírito do que você está dizendo, simplesmente não concordo com o "por definição", porque essa não é a definição (porque é imprecisa).wget http://mattmahoney.net/dc/enwik8.zip
pegar 96 MB (21 MB compactados) de texto da Wikipedia. Para um conjunto de benchmarks muito mais abrangente, consulte aqui .Bem, a palavra-chave era paralela . Depois de procurar todas as ferramentas de compactação que também eram paralelas , encontrei o seguinte:
PXZ - Parallel XZ é um utilitário de compactação que aproveita a execução da compactação LZMA 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 a menor influência possível na taxa de compactação.
sudo apt-get install pxz
PLZIP - Lzip é um compressor de dados sem perdas baseado no algoritmo LZMA, com verificação de integridade muito segura e uma interface de usuário semelhante à do gzip ou bzip2. O Lzip descompacta quase tão rápido quanto o gzip e compacta melhor que o bzip2, o que o torna adequado para distribuição de software e arquivamento de dados.
Plzip é uma versão massivamente paralela (multiencadeada) do lzip usando o formato de arquivo lzip; os arquivos produzidos pelo plzip são totalmente compatíveis com o lzip.
O Plzip é destinado à compactação / descompactação mais rápida de arquivos grandes em máquinas com multiprocessadores, o que o torna especialmente adequado para a distribuição de arquivos de software grandes e arquivamento de dados em grande escala. Em 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, é um substituto totalmente funcional para o gzip que tira proveito de vários processadores e múltiplos núcleos ao compactar dados.
sudo apt-get install pigz
PBZIP2 - pbzip2 é uma implementação paralela do compressor de arquivos de classificação de blocos bzip2 que usa pthreads e atinge aceleração quase linear em máquinas SMP. A saída desta versão é totalmente compatível com o bzip2 v1.0.2 (ou seja, qualquer coisa compactada com o pbzip2 pode ser descompactada com o bzip2).
sudo apt-get install pbzip2
LRZIP - Um programa de compactação multithread que pode atingir taxas e velocidades de compactação muito altas quando usado com arquivos grandes. Ele usa os algoritmos de compactação combinados de zpaq e lzma para máxima compactação, lzo para velocidade máxima e a redução de redundância de longo alcance do rzip. Ele foi projetado para aumentar com o tamanho da RAM, melhorando ainda mais a compactação. Uma escolha de otimizações de tamanho ou velocidade permite uma compactação melhor do que o lzma pode fornecer ou uma velocidade melhor que o gzip, mas com níveis de compactação do tamanho do bzip2.
sudo apt-get install lrzip
Um pequeno parâmetro de compactação (usando o teste que 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) )
Uma pequena referência 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%)
fonte
lrzip
pode ser descompactada usandopbzip2
, por exemplo.Além do belo resumo acima (obrigado Luis), hoje em dia as pessoas também podem querer considerar o PIXZ, que, de acordo com o README (Fonte: https://github.com/vasi/pixz - eu mesmo não verifiquei as reivindicações ) tem algumas vantagens sobre o PXZ.
Em outras palavras, o PIXZ é supostamente mais eficiente em memória e disco e possui um recurso de indexação opcional que acelera a descompactação de componentes individuais de arquivos tar compactados.
fonte
pixz
arquivos não são compatíveis com oxz
formato padrão , o caminhopxz
seria.pixz
pode descomprimirxz
arquivos exz
pode descomprimirpixz
arquivos. No entanto, as opções da linha de comando estão ativadasxz
epixz
diferem.pixz
.Atualizar:
O XZ Utils oferece suporte à compactação multithread desde a v5.2.0, ele foi originalmente documentado por engano como descompactação multithread.
Por exemplo:
tar -cf - source | xz --threads=0 > destination.tar.xz
fonte
export XZ_DEFAULTS="-T 0"
e, em seguida, basta usar sua chamada tar habitual, ou sejatar cJf target.tar.xz source
.O lzop também pode ser uma opção viável, embora seja de thread único.
Ele usa o algoritmo de compressão lempel-ziv-oberhumer muito rápido, que é 5-6 vezes mais rápido que o gzip na minha observação.
Nota: Embora ainda não seja multiencadeado, provavelmente superará o pigz em 1-4 sistemas principais. Por isso, decidi postar isso, mesmo que não responda diretamente à sua pergunta. Experimente, ele pode resolver o problema de gargalo da CPU ao usar apenas uma CPU e compactar um pouco pior. Eu achei muitas vezes uma solução melhor do que, por exemplo, pigz.
fonte
O compressor LZMA2 do p7zip usa os dois núcleos no meu sistema.
fonte
Não é realmente uma resposta, mas eu acho que é relevante o suficiente para compartilhar meus benchmarks comparando a velocidade de
gzip
epigz
em um verdadeiro HW em um cenário da vida real. Comopigz
é a evolução multithread que eu pessoalmente escolhi usar a partir de agora.Metadados:
Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz
(4c / 8t) + SSD NvmeXubuntu 17.10 (artful)
gzip
versão:1.6
pigz
versão:2.4
gzip
rápidogzip
melhorpigz
rápidopigz
melhor (nãozopfli
)pigz
+zopfli
algoritmoComo ponto de partida, eu não recomendaria o
zopfli
algoritmo, já que a compactação levou uma quantidade enorme de tempo para uma quantidade não tão significativa de espaço em disco poupado.Tamanhos de arquivo resultantes:
fonte
O Zstandard suporta multi-threading desde a v1.2.0 ¹. É um compressor e descompressor muito rápido, destinado a substituir o gzip e também pode comprimir tão eficiente - se não melhor - quanto o LZMA2 / XZ em seus níveis mais altos.
Você precisa usar uma versão artística ou uma versão mais recente ou compilar a versão mais recente da fonte para obter esses benefícios. Felizmente, isso não gera muitas dependências.
fonte