Em que devo confiar no lbzip2 ou no pbzip2?

10

Como o bzip2 alega compactar melhor (em tamanho), decidi usá-lo. O servidor de trabalho pode oferecer 24 CPUs (virtuais) (4 reais X5650 a 2,67GHz) - e, portanto, decidi procurar variantes paralelas.
Usando debian stable- desculpe, mas encontrei as melhores correspondências aqui no askubuntu - decidi dar uma olhada mais de perto pbzip2e lbzip2.
Mas o que selecionar? No atual estábulo pbzip2está na versão 1.1.1-1e lbzip2na versão 0.23-1. Isso pode tender cosmeticamente, pbzip2mas lbzip2diz que é mais rápido em computadores de núcleo único. Por outro lado, pbzip2afirma ser completamente compatível com bzip2 v1.0.2.
Além disso, tenho alguns valores de tempo de um grande trabalho local:
Usandolbzip2

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 tendem a lbzip2.

Bastian Ebeling
fonte
1
Nota rápida: os arquivos compactados com o bzip2 normal não terão aumento de desempenho quando descompactados com o pbzip2. No entanto, o pbzip2 arquiva um retrocompatível - eles podem ser descompactados com um utilitário de thread único ou paralelo.
STW 24/07

Respostas:

11

Aqui está uma idéia básica de como avaliá-los.

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

Em seguida, itere sobre 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 criador de perfil e obtenha um pico de uso de memória (virtual e RSS) para cada um. Novamente, isso produzirá 12 valores. (Se o seu Linux estiver configurado para não comprometer demais, você estará interessado no VSZ. Caso contrário, você se preocupa com o RSS).

Faça uma tabela com 12 linhas para esses pontos de dados - tamanhos compactados col1: 3, tempos de compactação col2: 3/9 tempos de descompactação, itens de pico col3: 12 - e escolha o que melhor combina com você. Você deve levar em consideração a frequência com que comprime e com que frequência descompacta.

Eu uso o lbzip2-0.23, mas o escrevi, para que não conte.

Finalmente, não importa qual seja o melhor para você, sempre salve uma soma de verificação do tarball descompactado e verifique o 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
lacos
fonte
4

Fiz alguns benchmarks de comparação para bzip2 vs pbzip2 e lbzip2, juntamente com lzip e plzip em http://vbtechsupport.com/1614/ . Estou gostando das melhorias de velocidade para o lbzip2, desde que você tenha memória suficiente.

p4guru
fonte