Em que devo confiar em lbzip2 ou pbzip2?

10

Como o bzip2 afirma comprimir melhor (em tamanho), decidi usá-lo. O servidor de trabalho pode oferecer 24 CPUs (virtuais) (4 reais X5650 @ 2.67GHz) - e, portanto, decidi procurar variantes paralelas. Usando debian stable - desculpe, mas achei as melhores correspondências aqui no askubuntu - decidi dar uma olhada em pbzip2 e lbzip2 .
Mas o que selecionar? Em estábulo real, pbzip2 está na versão 1.1.1-1 e lbzip2 na versão 0.23-1 . Isso pode esteticamente tender a pbzip2 - mas lbzip2 diz que é mesmo em computadores single-core mais rápidos. Por outro lado pbzip2 afirma ser completamente compatível com bzip2 v1.0.2 .
Além disso, tenho alguns valores de tempo de um grande trabalho local:
Usando lbzip2

Command being timed: "tar -cjf /tmp/mapleTAsicherung.lbzip2.tar /bin /etc /lib /lib32 /opt /sbin /selinux /usr"
    User time (seconds): 2134.32
    System time (seconds): 39.24
    Percent of CPU this job got: 2099%
    Elapsed (wall clock) time (h:mm:ss or m:ss): 1:43.51
    Average shared text size (kbytes): 0
    Average unshared data size (kbytes): 0
    Average stack size (kbytes): 0
    Average total size (kbytes): 0
    Maximum resident set size (kbytes): 1509088
    Average resident set size (kbytes): 0
    Major (requiring I/O) page faults: 0
    Minor (reclaiming a frame) page faults: 1054467
    Voluntary context switches: 153901
    Involuntary context switches: 235285
    Swaps: 0
    File system inputs: 0
    File system outputs: 3460632
    Socket messages sent: 0
    Socket messages received: 0
    Signals delivered: 0
    Page size (bytes): 4096
    Exit status: 0  

Usando pbzip2

    Command being timed: "tar -cjf /tmp/mapleTAsicherung.pbzip2.tar /bin /etc /lib /lib32 /opt /sbin /selinux /usr"
    User time (seconds): 3158.18
    System time (seconds): 59.80
    Percent of CPU this job got: 2095%
    Elapsed (wall clock) time (h:mm:ss or m:ss): 2:33.56
    Average shared text size (kbytes): 0
    Average unshared data size (kbytes): 0
    Average stack size (kbytes): 0
    Average total size (kbytes): 0
    Maximum resident set size (kbytes): 1436320
    Average resident set size (kbytes): 0
    Major (requiring I/O) page faults: 0
    Minor (reclaiming a frame) page faults: 477683
    Voluntary context switches: 151326
    Involuntary context switches: 339246
    Swaps: 0
    File system inputs: 0
    File system outputs: 3460536
    Socket messages sent: 0
    Socket messages received: 0
    Signals delivered: 0
    Page size (bytes): 4096
    Exit status: 0

O que se deve usar? Quais são as principais diferenças? No momento eu tenho tendência para lbzip2 .

    
por Bastian Ebeling 27.09.2011 / 11:42

2 respostas

8

Aqui está uma ideia básica de como avaliá-los.

Tome um grande tarball do tipo que você costuma trabalhar. Comprima com bzip2, pbzip2, lbzip2. Meça os tempos (relógio de parede) e salve todas as saídas em arquivos diferentes. Isso lhe dará três vezes e três tamanhos de arquivo.

Em seguida, repita todos os três arquivos de saída (ou seja, as saídas de compactação de bzip2, pbzip2, lbzip2) e descompacte cada um com os três utilitários (bzip2, pbzip2 e lbzip2). Isso lhe dará mais nove vezes.

Execute novamente os doze testes em algum perfilador e obtenha um pico de uso de memória (virtual e RSS) para cada um. Mais uma vez, isso produzirá 12 valores. (Se seu Linux está configurado para não comprometer demais, então você está interessado em VSZ. Caso contrário, você se preocupa com RSS).

Crie uma tabela com 12 linhas para estes pontos de dados - col1: 3 tamanhos comprimidos, col2: 3 tempos de compressão / 9 tempos de descompressão, col3: 12 picos de memória - e escolha o que mais lhe convier. Você deve levar em consideração a frequência com que você compacta versus com que frequência você descomprime.

Eu uso o lbzip2-0.23, mas eu o escrevi, então não conta.

Por fim, não importa qual seja a melhor opção para você, sempre salve uma soma de verificação do tarball descompactado , além de verificar seu arquivo salvo antes de declarar o backup "concluído".

FILES=...
OUTDIR=/mnt/archive
BZ2_UTIL=...

(
  tar -c -- $FILES \
  | tee >(sha256sum >"$OUTDIR"/myfiles.tar.sha256) \
  | pv -c -N plain 2>/dev/tty \
  | "$BZ2_UTIL" \
  | pv -c -N compr 2>/dev/tty \
  > "$OUTDIR"/myfiles.tar.bz2
) 2>"$OUTDIR"/myfiles.err

"$BZ2_UTIL" -dc -- "$OUTDIR"/myfiles.tar.bz2 \
| sha256sum -c -- "$OUTDIR"/myfiles.tar.sha256
    
por lacos 08.10.2011 / 22:46
4

Eu fiz alguns benchmarks de comparação para bzip2 vs pbzip2 e lbzip2 junto com lzip e plzip no link . Eu estou gostando das melhorias de velocidade para o lbzip2 contanto que você tenha memória suficiente.

    
por p4guru 22.11.2011 / 06:07