Sur quoi dois-je m'appuyer sur lbzip2 ou pbzip2?

10

Comme bzip2 prétend compresser le mieux (en taille), j'ai décidé de l'utiliser. Le serveur de travail peut offrir 24 processeurs (virtuels) (4 X5650 réels à 2,67 GHz) - et j'ai donc décidé de rechercher des variantes parallèles.
En utilisant debian stable- désolé, mais j'ai trouvé les meilleures correspondances ici dans askubuntu - j'ai décidé d'examiner de plus près pbzip2et lbzip2.
Mais que choisir? En réalité stable pbzip2est en version 1.1.1-1et lbzip2en version 0.23-1. Cela pourrait avoir tendance à être cosmétique pbzip2- mais lbzip2dit que c'est même plus rapide sur les ordinateurs monocœur. D'autre part, pbzip2prétend être complètement compatible avec bzip2 v1.0.2.
De plus , j'ai des valeurs temporelles d'un grand travail local: L'
utilisationlbzip2

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  

En utilisant 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

Que faut-il utiliser? Quelles sont les principales différences? En ce moment je tends vers lbzip2.

Bastian Ebeling
la source
1
Remarque rapide: les fichiers compressés avec le bzip2 normal ne verront pas leur performance augmenter lorsqu'ils sont décompressés avec pbzip2. Cependant, pbzip2 archive une compatibilité descendante - ils peuvent être décompressés avec un utilitaire à thread unique ou parallélisé.
STW

Réponses:

11

Voici une idée de base pour les évaluer.

Prenez un gros tarball du type avec lequel vous travaillez habituellement. Compressez-le avec bzip2, pbzip2, lbzip2. Mesurez les heures (horloge murale) et enregistrez toutes les sorties dans différents fichiers. Cela vous donnera trois fois et trois tailles de fichier.

Ensuite, parcourez les trois fichiers de sortie (c'est-à-dire les sorties de compression de bzip2, pbzip2, lbzip2) et décompressez chacun avec les trois utilitaires (bzip2, pbzip2 et lbzip2). Cela vous donnera encore neuf fois.

Réexécutez les douze tests sous un profileur et obtenez une utilisation maximale de la mémoire (virtuelle et RSS) pour chacun. Encore une fois, cela donnera 12 valeurs. (Si votre Linux est configuré pour ne pas surcharger, alors vous êtes intéressé par VSZ. Sinon, vous vous souciez de RSS).

Créez un tableau avec 12 lignes pour ces points de données - col1: 3 tailles compressées, col2: 3 temps de compression / 9 temps de décompression, col3: 12 mems de pointe - et choisissez ce qui vous convient le mieux. Vous devez prendre en compte la fréquence à laquelle vous compressez par rapport à la fréquence à laquelle vous décompressez.

J'utilise lbzip2-0.23, mais je l'ai écrit, donc ça ne compte pas.

Enfin, quel que soit celui qui vous convient le mieux, enregistrez toujours une somme de contrôle de l' archive tar non compressée , puis vérifiez votre fichier enregistré avant de déclarer la sauvegarde "terminée".

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
la source
4

J'ai fait des comparaisons de comparaison pour bzip2 vs pbzip2 et lbzip2 avec lzip et plzip sur http://vbtechsupport.com/1614/ . J'aime les améliorations de vitesse pour lbzip2 tant que vous avez suffisamment de mémoire.

p4guru
la source