mgzip et pbzip2 ou la compression multithreads
En ce dimanche, alors que je cherchais des infos sur les scripts baash multithreads, je suis tombé sur des articles parlant de programme de compression multithread mgzip et pbzip2.
mgzip et pbzip2 doivent tout être compiler avec un compilateur c++ compatible avec pthreads (comme gcc). A noter que pbzip2 est disponilbe pour la plupart des distributions et même une version compilé existe pour… MS Windows. Alors que mgzip devra être compilé à la main.
A noter que mgzip ne s’occupe que de la compression et que toute décompression de .gz devra ce faire avec l’habituelle commade gunzip. Tandis que pbzip2 fournis la commande pbunzip2 permettant la décompression tout en utilisant tous les processeurs.
Et je précise, les fichiers compressés avec mgzip et pbzip2 restent compatible avec les commandes standars.
Comme j’ai eu la flemme de compiler mgzip et étant plus intéressé par pbzip2, mgzip ne fait partie de mon petit benchmark !
Le test est relativement simple. J’ai créé 3 archives .tar des sources du nouyau linux 2.6.29-r1, fournis par gentoo, et obtenus les 3 fichiers suivant :
1 2 3 | -rw-r--r-- 1 root root 335933440 avril 19 13:02 bz_linux-2.6.29-gentoo-r1.tar -rw-r--r-- 1 root root 335933440 avril 19 13:02 gz_linux-2.6.29-gentoo-r1.tar -rw-r--r-- 1 root root 335933440 avril 19 13:02 pbz_linux-2.6.29-gentoo-r1.tar |
Premier test : gzip
1 2 3 4 5 6 | src # time gzip gz_linux-2.6.29-gentoo-r1.tar real 0m18.347s user 0m18.010s sys 0m0.310s src # ls -l *.gz -rw-r--r-- 1 root root 74033609 avril 19 13:02 gz_linux-2.6.29-gentoo-r1.tar.gz |
Deuxième test : bzip2
1 2 3 4 5 6 7 | src # time bzip2 bz_linux-2.6.29-gentoo-r1.tar real 1m4.683s user 1m4.390s sys 0m0.290s src # ls -l *.bz2 -rw-r--r-- 1 root root 57590055 avril 19 13:02 bz_linux-2.6.29-gentoo-r1.tar.bz2 |
Troisième test : pbzip2
1 2 3 4 5 6 7 | time pbzip2 pbz_linux-2.6.29-gentoo-r1.tar real 0m19.830s user 1m11.300s sys 0m2.460s src # ls -l pbz* -rw-r--r-- 1 root root 57740857 avril 19 13:02 pbz_linux-2.6.29-gentoo-r1.tar.bz2 |
Résultat :
gzip :
durée : 18 secondes
taille de l’archive : 74033609 (71 M)
bzip2 :
durée : 1 minute
taille de l’archive : 57590055 (55 M)
pbzip2 :
durée : 19 secondes
taille de l’archive : 57740857 (56 M)
Les tests, ayant été effectués sur un Q6600 en cours d’utilisation avec X11, Gnome, Firefox etc. peuvent variés et ne sont donnés qu’à titre informatif.
Cela dit, et après plusieurs essais, les tailles sont identiques (heureusement !) et les durées varient assez peu. Mais la tendance reste la même : pour la durée d’un gzip, on obtient une archive bzip2 !
La différence de taille entre l’archive bzip2 et pbzip2 provient probablement du fait que pbzip2 enregistre des données supplémentaires, car lorsque j’ai essayé de décompresser une archive faite avec bzip2, pbzip2 m’indique qu’il lance la commande bzip2 : Switching to no threads mode: only 1 BZIP2 block found.
La décompression d’une archive bz2 faite avec pbzip2 avec bzip2 ce passe sans problème.
Unique visitors to post: 115Tags:astuce | distribution | Gentoo | Linux | Programmation | script | shell | système | Tutorial | Ubuntu | Windows
Bonjour,
Je suis tomber sur votre article par hasard. Pouvez vous m’indiquer comment installer l’extension bzip2 sur un gentoo.
Merci
@maya
Pour commencer,pbzip2 est un programme à part entière et non une extension pour bzip2.
Pour l’installer sur une gentoo, rien de plus simple : emerge app-arch/pbzip2
Pour pouvoir l’utiliser à la place de bzip2 :
(en tant que root)
cd /usr/bin
ln -s ./pbzip2 bzip2
ln -s ./pbunzip2 bunzip2
et pour vérifier :
which bzip2
/usr/bin/bzip2
Dorénavant, toute action entrainant une compression/décompression bzip2 sera traitée, de manière transparente, avec pbzip2.