Esses scripts simples comparam diferentes bibliotecas de compactação zlib para o compressor paralelo pigz. A compactação paralela pode usar vários núcleos disponíveis em computadores modernos para compactar dados rapidamente. Esta técnica pode ser combinada com o zlib CloudFlare que acelera a compactação usando outros recursos de hardware moderno. Aqui, adaptei o script para avaliar a compactação .gz de imagens cerebrais no formato NIfTI. É comum que ferramentas como AFNI e FSL salvem imagens NIfTI usando compactação gzip (arquivos .nii.gz). Métodos modernos de ressonância magnética, como multibanda, produzem enormes conjuntos de dados, gastando um tempo considerável na compactação dessas imagens.
O gráfico abaixo mostra o desempenho do pigz versus o pigz de thread único padrão, de modo que '1' indica desempenho equivalente. O desempenho é mostrado para 3 níveis de compactação: rápido (3, linha de base 35 segundos), padrão (6, 50s) e lento (9, 183s). O eixo horizontal mostra o número de threads dedicados à compactação. Em níveis de compactação mais baixos (1), todas as ferramentas são relativamente rápidas, sendo a leitura e gravação do disco o fator limitante da taxa. Em níveis de compactação mais altos, a combinação de vários threads e aprimoramentos do CloudFlare aceleram drasticamente o desempenho em relação ao gzip padrão. O sistema de teste foi um Intel Xeon Platinum 8260 de 24 núcleos (48 threads):
O próximo gráfico mostra cada ferramenta usando seu número preferido de threads em um computador de 4 núcleos (8 threads) para compactar o popular corpus da Silésia. Todas as versões do pigz superam o gzip de thread único do sistema. Pode-se ver que o formato zstd moderno domina o gzip mais antigo e mais simples. O gzip foi amplamente adotado em muitos campos (por exemplo, em imagens cerebrais, é usado para NIfTI, NRRD e AFNI). A simplicidade do formato gzip significa que é fácil para os desenvolvedores incluir suporte em suas ferramentas. Portanto, o gzip ocupa um nicho importante na comunidade. No entanto, formatos modernos que foram projetados para hardware moderno e que utilizam novas técnicas têm benefícios inerentes.
O script 5decompress.sh
nos permite comparar a velocidade de descompressão. A descompressão é mais rápida que a compressão. No entanto, a descompactação gzip não pode aproveitar vários threads e geralmente é mais lenta que os formatos de compactação modernos. Neste teste, todas as ferramentas gz estão descompactando esses dados. Por outro lado, bzip2 e ztd descompactam dados que foram compactados para um tamanho menor. A velocidade em megabytes por segundo é calculada com base no tamanho descompactado. É típico que compactações mais compactas usem algoritmos mais complicados, portanto, a comparação entre formatos é um desafio. Independentemente disso, entre as ferramentas gz, o zlib-ng mostra desempenho de descompressão superior:
Velocidade (mb/s) | pigz-CF | porcoz-ng | pigz-Sys | gzip | pbzip2 | pbzip2 |
---|---|---|---|---|---|---|
Descompressão | 278 | 300 | 274 | 244 | 122 | 236 |
Execute o benchmark com um comando como este:
1compile.sh
2test.sh
5decompress.sh
1compile.sh
irá baixar e construir cópias do pigz usando diferentes variantes do zlib (sistema, CloudFlare, ng). Ele também baixa imagens de amostra para testar a compactação, especificamente as amostras de exames de ressonância magnética que são copiadas para a pasta corpus
. Você deve executar esse script primeiro uma vez, antes dos outros scripts. Todos os outros scripts podem ser executados independentemente uns dos outros.2test.sh
compara a velocidade das diferentes versões do pigz, bem como do gzip de thread único do sistema. Você pode substituir os arquivos na pasta corpus
por outros mais representativos do seu conjunto de dados.3slowtest.sh
baixa o corpus da Silésia e testa a velocidade de compactação. Este corpus é popular: benchmark 1, benchmark 2, benchmark 3.4verify.sh
testa a compactação e descompactação de cada método, garantindo que eles sejam capazes de armazenar dados sem perdas.5decompress.sh
avalia a velocidade de descompressão. Em geral, o formato gzip é lento para compactar, mas rápido para descompactar (principalmente em comparação com formatos desenvolvidos ao mesmo tempo). No entanto, a descompressão gzip é lenta em relação ao zstd moderno. Além disso, embora a compactação gzip possa se beneficiar do processamento paralelo, a descompactação não. Uma característica importante deste script é que cada variante do zlib contribui com arquivos compactados para o corpus de teste e, em seguida, cada ferramenta é testada neste corpus completo. Isso garante que estamos comparando tarefas semelhantes, já que alguns métodos de compactação zlib podem gerar arquivos menores ao custo de criar arquivos que são mais lentos para descompactar.6speed_size.sh
compara diferentes variantes de pigz com gzip, zstd e bzip2 para compactar o corpus da Silésia. Cada ferramenta é testada em diferentes níveis de compactação, mas sempre usando o número preferido de threads. blocksize
que corresponda ao número de threads para compactação. Este repositório inclui o script test_mgzip.py
para avaliar esta ferramenta.