AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 772543
Accepted
ChennyStar
ChennyStar
Asked: 2024-03-17 18:25:20 +0800 CST2024-03-17 18:25:20 +0800 CST 2024-03-17 18:25:20 +0800 CST

Por que o 7-zip é muito mais rápido que outras implementações LZMA no Linux?

  • 772

Até agora, eu costumava fazer backup dos meus dados usando taruma das opções de compactação LZMA ( --lzma, --xzou --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 tara saída de lzma|xz|lzip, em vez de usar as opções --lzma, --xze . --lzipMesmos 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 .tararquivo.

Então, alguém sabe por que a versão Linux do 7-Zip é muito mais rápida que outras implementações LZMA?

performance
  • 2 2 respostas
  • 131 Views

2 respostas

  • Voted
  1. ChennyStar
    2024-03-17T21:14:56+08:002024-03-17T21:14:56+08:00

    Encontrei a resposta para minha pergunta. Basicamente, parece que 7zzé multithread por padrão, o que não é o caso de xzor lzip. 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:

    $ time tar c -hp TEST/ | 7zz a -si test.tar.7z
    real 0m17,986s
    
    // free memory
    
    $ time tar c -hp TEST/ | xz --threads=0 > test.tar.xz
    real 0m22,920s
    
    // free memory
    
    $ sudo apt install plzip
    
    $ time tar -chp --lzip -f test.tar.lz TEST/
    real 0m20,134s
    

    Curiosamente, a instalação plzip(lzip paralelo) torna tar --lzipseu uso automático (provavelmente porque /usr/bin/lzipse 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:

    O modo multithread agora é o padrão. Isso melhora a velocidade de compactação e cria arquivos .xz que podem ser descompactados em multithread ao custo de maior uso de memória e taxa de compactação um pouco pior.

    • 3
  2. Best Answer
    Artem S. Tashkinov
    2024-03-17T22:18:31+08:002024-03-17T22:18:31+08:00

    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.

    • 1

relate perguntas

  • Como verificar se um aplicativo está usando renderização de exibição baseada em hardware ou software?

  • Como imprimir apenas 1 nome de arquivo junto com o padrão correspondente?

  • Por que `sync + drop_caches` não está descartando caches?

  • Por que `strace` não mostra que este processo está esperando por algo?

  • Tempo de criação do processo, shell script e overhead de chamada do sistema

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve