Dando sequência ao post anterior, quando realizei um benchmark entre diversos compressores no Linux, decidi fazer um segundo teste , mas desta vez apenas com os meus "eleitos" vencedores naquele post: ZIP, GZIP, ZSTD, BZIP2, BROTLI, XZIP e 7ZIP.
O arquivo escolhido para ser compactado e descompactado foi o código-fonte do kernel 5.13.12 do Linux. Como todos sabem, ele é essencialmente um monte de arquivos texto. Ele foi escolhido para dar uma outra perspectiva desses compressores. Será que eles se saem diferente?
Os testes foram realizados na mesma máquina: Ryzen 5 1600 AF (12 threads!) e num SSD M.2 com leitura e gravação altíssima. A diferença é que os testes foram realizados alternadamente com multithreading ("MT") habilitado e desabilitado. Isso permite comparar melhor aqueles pogramas que possuem MT com aqueles que não possuem.
Resultados
(*) na coluna tamanho, o resultado está em "por mil", isto é, 100% multiplicado por 10. Sendo 1000 (100%) o valor atribuído ao arquivo sem compressão, apenas arquivado pelo TAR.
Todos tiveram um bom desempenho, reduzindo em mais de 78% o tamanho do arquivo. O interessante deste resultado é que as posições se mantiveram:
7z > Xz > Brotli (6-8) > Bzip2 > Zstd (3-9) > Gzip > Zip
Em parêntesis o nível de compressão. Reparem que nesse teste tanto Brotli quanto Zstd não foram testados em seu nível máximo (11 e 19, respectivamente). O nível de compressão padrão do Brotli é o máximo (11), mas como ele é estupidamente lento, optei por realizar o teste apenas nos níveis intermediários. Já o nível de compressão padrão do Zstd é apenas 3, e acima de 9 não há ganhos consideráveis de compressão, mas há uma perda sensível de velocidade de compressão, então limitei a 9.
Conclusões
Apesar da superioridade do 7zip sobre o xzip, observada tanto no teste anterior quanto no atual, a diferença de desempenho entre eles é insignificante: algo em torno de 2 a 3%, chegando a 5% no teste anterior, com arquivos diversos. Em arquivos grandes isso representa apenas uns poucos megabytes (Mb). A diferença dos tempos de compressão entre ambos é bem pequena quando se usa o MT, afinal 10 segundos não é nada! Existe uma diferença mais considerável quando o MT está desabilitado, sendo 40s maior para o XZ. Porém, o MT está disponível para ambos, sendo habilitado por padrão no 7Z. No XZ temos que usar a opção "-t0". Na descompressão, o XZ é apenas 3 segundos mais rápido em qualquer dos casos.
No Linux podemos usar o XZ sem receio, como ele usa o mesmo algoritmo do 7Z, o 7zip do Windows consegue descompactá-lo facilmente. Não é à toa que o kernel linux é distribuído no formato tar.xz. Lembro do tempo que era distribuído pelo bzip2, que gera arquivos quase 20% maiores, e estamos falando de 24 Mb de diferença!
Nos formatos de baixa compressão, a superioridade do gzip sobre o zip se mostrou mais evidente nesse teste onde arquivos textuais são usados. Foi mais de 20% de diferença (42 Mb)!
O Zstandard (ZSTD) é superior ao GZIP em tudo, exceto na popularidade. O BROTLI, que usa o mesmo algoritmo (LZ77), também supera o BZIP2 a partir do nível de compressão 7. O BZIP2 sempre usa o nível de compressão máximo (9). Porém, assim como o ZSTD, ele não é popular. Quero dizer, ele é bastante difundido na compressão em Web Servers, para conteúdo a ser descompactado por navegadores. Então ele não concorre com o BZIP2. Botei BROTLI e ZSTD nesse teste apenas por curiosidade minha.
Adendo
Esse adendo é posterior ao teste acima. Realizei, por curiosidade, a compressão e descompressão do kernel linux com o Brotli no nível de compressão padrão (-q 11). Usei o kernel 5.13.13, pois o 5.13.12 não estava mais disponível, porém a diferença de tamanho entre eles é de apenas 10.752 bytes, isto é, 11 Kb. Os resultados:
$ time tar -I brotli -cvf linux.tar.br linux-5.13.13/
Tempo de compressão: 1.819,614 (30 min e 19 seg!)
Tamanho do arquivo compactado: 121.484.145 bytes (tamanho "por mil" = 111, ou 11,1% do tamanho original)
$ time brotli -d linux.tar.br
Tempo de descompressão: 2,076 segundos
Foi o melhor resultado, mas esperar meia hora pra compactar não compensa.
Os níveis 9 e 10 também foram testados:
9 : 134,776s : 1,976s : 128 por mil
10 : 802,547s : 2,193s : 124 por mil
11 : 1819,614s : 2,076s : 111 por mil
Também acabei testando o ZPAQ (nível de compressão 3, o padrão é 1), que usa o mesmo algoritmo (LZ77) do BROTLI e do ZSTD, mas possui a vantagem de ter suporte a MT na compressão e na descompressão. É evidente que a descompressão dele é péssima, mas ele é mais recomendado para backups de HD.
$ time zpaq a linux.zpaq linux.tar -m3
3 : 56,384s : 57,359s : 114 por mil
Conclusões do Adendo
Qualquer que seja sua escolha, frise-se que ambos perdem para o XZIP!
É melhor deixar BROTLI para sites, ZPAQ para backups de HD (no nível padrão -m1 mesmo, porque ele é rápido e incremental) e XZIP para arquivos em geral.
Nenhum comentário:
Postar um comentário