Até agora, eu costumava fazer backup dos meus dados usando tar
uma das opções de compactação LZMA ( --lzma
, --xz
ou --lzip
)
Recentemente notei que o 7-Zip foi portado para Linux em 2021 ( https://www.xda-developers.com/7-zip-linux-official-release/ ). Não estou falando do antigo P7Zip ( https://p7zip.sourceforge.net/ ), que parece não ter mais manutenção, mas do 7-Zip oficial.
Então, eu testei e fiquei muito surpreso ao descobrir que ele é MUITO mais rápido que todas as outras implementações Linux LZMA, para a mesma taxa de compressão.
Abaixo meus testes (Debian 11). Por favor, não que eu esvaziei o cache RAM entre cada teste ( sync && echo 3 > /proc/sys/vm/drop_caches
)
Estou trabalhando em uma pasta de 163M, contendo vários tipos de arquivos, PDF, texto, open office, e assim por diante...
$ du -hs TEST/
163M TEST/
Com o 7-Zip, ele é compactado em um arquivo de 127 MB em 15 segundos:
$ time tar c -hp TEST/ | 7zz a -si test.tar.7z
real 0m14,565s
(...)
$ ll test.tar.7z
(...) 127M (...) test.tar.7z
Considerando que com todas as outras implementações do LZMA, leva quase 5 vezes mais tempo (cerca de 1'13"), para o mesmo tamanho de arquivo!
$ time tar -chp --lzma -f test.tar.lzma TEST/
real 1m13,159s
$ time tar -chp --xz -f test.tar.xz TEST/
real 1m12,889s
$ time tar -chp --lzip -f test.tar.lz TEST/
real 1m12,525s
$ ll test.tar.{7z,lz*,xz}
(...) 127M (...) test.tar.7z
(...) 127M (...) test.tar.lz
(...) 127M (...) test.tar.lzma
(...) 127M (...) test.tar.xz
Só para ter certeza de que não há nada de errado com tar
, fiz os mesmos testes, mas canalizei tar
a saída de lzma|xz|lzip
, em vez de usar as opções --lzma
, --xz
e . --lzip
Mesmos resultados.
Então, basicamente, a versão Linux do 7-Zip faz com que todas as outras implementações do LZMA pareçam bastante sombrias. Acho que o 7-Zip não oferece suporte a proprietários e permissões de Linux, mas isso é irrelevante ao compactar um .tar
arquivo.
Então, alguém sabe por que a versão Linux do 7-Zip é muito mais rápida que outras implementações LZMA?
Encontrei a resposta para minha pergunta. Basicamente, parece que
7zz
é multithread por padrão, o que não é o caso dexz
orlzip
. Adicione multi-thread na equação e os resultados ficarão muito mais próximos, mesmo que o 7-Zip permaneça um pouco mais rápido:Curiosamente, a instalação
plzip
(lzip paralelo) tornatar --lzip
seu uso automático (provavelmente porque/usr/bin/lzip
se torna um link simbólico para/usr/bin/lzip.plzip
, pelo menos no Debian).[EDITAR]
Além disso, observe que desde a versão 5.5.1 (janeiro de 2024), que não usei,
xz
é multithread por padrão:7zz usa assembly escrito à mão , p7zip e xz não.
Além disso, a implementação do LZMA do XZ é muito desatualizada. Igor Pavlov fez muitas mudanças no 7-zip para acelerá-lo nos últimos sete anos.