ArtigosDestaque

Compressão: Lrzip

Datasets escolhidos para os benchmarks

Escolhi cinco datasets para efectuar os benchmarks:

O primeiro é uma pasta com mais de 30 mil imagens, não optimizadas, que ocupam no total 6503413760 Bytes.
Por não estarem optimizadas, estou à espera que se consiga alguma compressão, mas não tanta como conseguiria com o imagemagick ou pngout, que são compressores específicos.

O segundo é uma pasta com vários kernels de Linux do 2.6.0 ao 2.6.39.
Esta pasta tem quase 1 milhão de ficheiros e 11071651840 Bytes de dados muito redundantes, visto haver informação repetida entre as diversas versões.
Por ser texto e pela redundância, é neste dataset que espero maior compressão.
Este dataset pode ser feito download em lrzip, neste link.

O terceiro dataset é o conteúdo do Office 2007, que ocupa 125837312 Bytes.
Este dataset coloquei por não saber o que esperar da compressão de binários.
Provavelmente já têm alguma compressão e foi na expectativa que coloquei este dataset.

O quarto dataset são 8 vídeos em h264, totalizando 9886064640 Bytes.
Coloquei este dataset porque penso que será o mais complicado de comprimir, visto que vídeos em h264 já estão comprimidos em si mesmo.

Por último, um disco virtual de Virtualbox, com o Windows 7.
O disco não se encontra compactado e ocupa 9948098560 Bytes.
Apesar de ser apenas um ficheiro, como é um disco dinâmico, espero que se consiga alguma compressão.

 

Ferramentas utilizadas nos testes

Como disse anteriormente, todas as ferramentas que usei estão no repositório do Debian Testing.
Fica aqui a descrição delas

Tar

Comprimir: tar --force-local -v -p /path/* -cf /ficheiro.tar
Descomprimir: tar -xf /ficheiro.tar
Versão: tar-1.25-3-amd64

Tar, na verdade, não é um compressor, mas sim um arquivador.
Coloquei o Tar neste artigo, para empacotar todas as pastas num único ficheiro e servir de base para as comparações com os outros testes.

Zip

Comprimir: zip imagens -Z deflate -6 ficheiro.tar
Descomprimir: unzip office2007.zip
Versão: Zip 3.0 (July 5th 2008), by Info-ZIP

Zip tem mais de 20 anos, quando em 1989 a Pkware decidiu criar o formato Zip em troca do formato Arc.
Zip usa o método “Deflate”, que é a combinação de dois algoritmos. LZ77 e Huffman coding.

Gzip

Comprimir: gzip -5 ficheiro.tar
Descomprimir: uncompress ficheiro.tar.gz
Versão: 1.3.12

Gzip é a versão Zip Gnu. Surgiu em 1992 e segue os mesmos algoritmos do Zip

Bzip2

Comprimir: bzip2 -5 ficheiro.tar
Descomprimir: bunzip2 ficheiro.tar.bz2
Versão: 1.0.5, 10-Dec-2007

Bzip2 apareceu em 1996 e tem um formato diferente do Zip, apesar de ter a palavra no nome.
Primeiro divide os ficheiros em blocos de 100 a 900 KB e usa Burrows–Wheeler transform como compressão. Numa segunda fase, usa Move-to-front transform e Huffman coding.

Xz

Comprimir: xz -f -k -F xz -6 ficheiro.tar
Descomprimir: xz -d ficheiro.tz
Versão: 5.0.0-2

Xz apareceu em 2009 na sua versão 1.0 do formato. Usa Lempel–Ziv–Markov como algoritmo na sua versão 2 ou, sendo mais curto, LZMA2.

Rar

Comprimir: rar a -m3 ficheiro.tar.rar ficcheiro.tar
Descomprimir: rar e ficheiro.tar.rar
Versão: 4.00 beta 3

Rar apareceu em 1993 e é um formato proprietário. A versão corrente do ficheiro (Rar 3), usa LZ77 e Prediction by partial matching, ou PPMd, como algoritmos.

7-zip

Comprimir: 7z a -m0=lzma -mx=5 ficheiro.7z ficheiro.tar
Descomprimir: 7z e imagens.tar.7z
Versão: 9.04 beta

7-zip apareceu em 1999 e pode usar vários algoritmos, apesar de por defeito usa LZMA na sua versão 1.

Rzip

Comprimir: rzip -6 -k ficheiro.tar
Descomprimir: rzip -d ficheiro.tar
Versão: 2.1

Rzip apareceu em 1998 e tem como objectivo a melhor compressão de ficheiros grandes em tamanho.
Rzip usa duas fases. Primeiro divide o ficheiro em fatias de 900 MB e usa LZ77. Numa segunda fase comprime o resultado todo em Bzip2.

Lrzip

Comprimir:
lrzip ficheiro.tar (lzma, com limite de memória)
lrzip -l ficheiro.tar (lzo, com limite de memória)
lrzip -g ficheiro.tar (gzip, com limite de memória)
lrzip -b ficheiro.tar (bzip2, com limite de memória)
lrzip -U ficheiro.tar (lzma, sem limite de memória)
lrzip -Ul ficheiro.tar (lzo, sem limite de memória)
lrzip -Uz ficheiro.tar (zpaq, sem limite de memória)
Descomprimir: lrzip -d ficheiro.tar
Versão: 0.603

Lrzip segue o mesmo conceito de Rzip, mas com a flag -U pode não ter limite no dicionário durante a primeira fase.
Na segunda fase, pode usar LZMA, LZO, gzip, bzip2 ou zpaq.
LZO é outro algoritmo de compressão, conhecido por ser rápido.
Zpaq é uma proposta de standard de compressão, conhecido pela sua alta percentagem de compressão.

Shell Script

Para efeitos de teste, não corri cada comando à mão, nem contei manualmente quantos segundos demorava a comprimir e descomprimir.

Para tal, fiz um shell script, que tendo a mesma estrutura, fez isso por mim. Só tive que deixar o script correr, não ter outros programas a correr no computador, sem ser os mais básicos (ao todo o sistema operativo ocupa 120 MB de Ram, depois do arranque) e esperar que o script acabasse.
No fim, foi pegar nos dados e colocar no Excel 2007, que funciona como uma maravilha em Linux usando Wine.

Aqui fica a estrutura base do shell script:

echo lrzip -l race.tar
before="$(date +%s)"
lrzip -l race.tar
after="$(date +%s)"
elapsed_seconds="$(expr $after - $before)"
echo Elapsed time for code block: $elapsed_seconds
mv race.tar.lrz temp
cd temp
ls -la *.lrz
before="$(date +%s)"
lrzip -d race.tar.lrz
after="$(date +%s)"
elapsed_seconds="$(expr $after - $before)"
echo Elapsed time for code block: $elapsed_seconds
rm -rf *
cd ..
Página anterior 1 2 3 4Página seguinte

Artigos Relacionados

Botão Voltar ao Topo