Para distribuir arquivos pela Internet, geralmente o seguinte é uma prioridade:
- Taxa de compressão (ou seja, quão pequeno o compressor torna os dados);
- Tempo de descompressão (requisitos de CPU);
- Requisitos de memória de descompressão; e
- Compatibilidade (quão amplo é o programa de descompressão)
Os requisitos de memória de compactação e CPU não são muito importantes, porque você pode usar uma máquina grande e rápida para isso e só precisa fazê-lo uma vez.
Comparado ao bzip2, o xz possui uma melhor taxa de compactação e menor (melhor) tempo de descompactação. No entanto - nas configurações de compactação normalmente usadas - requer mais memória para descomprimir [1] e é um pouco menos difundida. Gzip usa menos memória que qualquer um.
Portanto, os arquivos dos formatos gzip e xz são publicados, permitindo que você escolha:
- Precisa descompactar em uma máquina com memória muito limitada (<32 MB): gzip. Dado, não é muito provável quando se fala de fontes do kernel.
- Precisa descomprimir o mínimo de ferramentas disponíveis: gzip
- Deseja economizar tempo de download e / ou largura de banda: xz
Não existe realmente uma combinação realista de fatores que levem você a escolher o bzip2. Então está sendo eliminado.
Eu olhei comparações de compactação em um post do blog . Não tentei replicar os resultados e suspeito que alguns deles tenham mudado (principalmente, espero que xz
tenha melhorado, pois é o mais novo).
(Existem alguns cenários específicos em que uma boa implementação do bzip2 pode ser preferível ao xz: o bzip2 pode compactar um arquivo com muitos zeros e seqüências de DNA do genoma melhor que o xz. As versões mais recentes do xz agora têm um modo de bloco (opcional) que permite a recuperação de dados após o ponto de corrupção e compactação paralela e [em teoria] descompactação. Anteriormente, apenas o bzip2 os oferecia. [2] No entanto, nenhum deles é relevante para a distribuição do kernel)
1: No tamanho do arquivo, xz -3
está disponível bzip -9
. Então xz usa menos memória para descomprimir. Mas xz -9
(como, por exemplo, usado para tarballs do kernel do Linux), usa muito mais do que bzip -9
. (E ainda xz -0
precisa de mais do que gzip -9
).
2: Alteração no sistema F21: lbzip2 como implementação padrão do bzip2
Primeiro de tudo, esta questão não está diretamente relacionada
tar
. O Tar apenas cria um arquivo não compactado, a compactação é aplicada mais tarde.Sabe-se que o gzip é relativamente rápido quando comparado ao LZMA2 e bzip2. Se a velocidade importa,
gzip
(especialmente a implementação multithreadpigz
), geralmente é um bom compromisso entre a velocidade e a taxa de compactação. Embora existam alternativas se a velocidade for um problema (por exemplo, LZ4).No entanto, se uma taxa de compressão alta for desejada, o LZMA2 supera
bzip2
quase todos os aspectos. A velocidade de compactação geralmente é mais lenta, mas descomprime muito mais rapidamente e fornece uma taxa de compactação muito melhor, com o custo de maior uso de memória.Não há muitos motivos para usar
bzip2
mais, exceto a compatibilidade com versões anteriores. Além disso, o LZMA2 foi projetado com multithreading em mente e muitas implementações por padrão fazem uso de CPUs multicore (infelizmentexz
no Linux ainda não faz isso). Isso faz sentido, pois as velocidades do relógio não aumentam mais, mas o número de núcleos aumenta.Existem
bzip2
implementações multithread (por exemplopbzip
), mas elas geralmente não são instaladas por padrão. Observe também que os multithreadsbzip2
realmente valem a pena durante a compactação, enquanto a descompactação usa um único thread se o arquivo foi compactado usando um único threadbzip2
, em contraste com o LZMA2. Asbzip2
variantes paralelas só podem aproveitar CPUs multicore se o arquivo foi compactado usando umabzip2
versão paralela , o que geralmente não é o caso.fonte
z
opção.xz
será multithread por padrão, portanto nenhumapixz
instalação será necessária no futuro. Em algumas plataformas, oxz
encadeamento já é suportado. Considerandobzip2
que provavelmente nunca será multithread, já que o formato não foi projetado com o multithreading em mente. Além disso,pbzip2
apenas acelera a descompactação se o arquivo tiver sido compactado, opbzip2
que geralmente não é o caso.Resposta curta : xz é mais eficiente em termos de taxa de compressão. Assim, economiza espaço em disco e otimiza a transferência através da rede.
Você pode ver este Quick Benchmark para descobrir a diferença em testes práticos.
fonte
O LZMA2 é um sistema de compressão de blocos, enquanto o gzip não é. Isso significa que o LZMA2 se presta a multithreading. Além disso, se ocorrer corrupção em um arquivo, geralmente você poderá recuperar dados de blocos subsequentes com o LZMA2, mas não poderá fazer isso com o gzip. Na prática, você perde o arquivo inteiro com o gzip subsequente ao bloco corrompido. Com um arquivo LZMA2, você perde apenas os arquivos afetados pelo (s) bloco (s) corrompido (s). Isso pode ser importante em arquivos maiores com vários arquivos.
fonte