Généralités système Linux

Activer par défaut le multithread pour gzip et bzip2

Table des matières

Introduction



Dans cet article Compresser en multithreading sous Linux (gzip pigz, bzip2 lbzip2) nous avons vu que pigz est l'alternative multithread à gzip et que lbzip2 est l'alternative multithread à bzip2.

Cependant, pour utiliser ces versions plus performantes, on doit préciser explicitement le nom du programme dans les diverses lignes de commandes (comme tar).

Nous allons voir comment appeler pigz et lbzip2 automatiquement quand gzip et bzip2 sont invoqués.

Mise en place



Gentoo



Dans le cas de la distribution Gentoo, nous pouvons appliquer le remplacement de manière élégante grâce aux paquets app-alternatives/gzip et app-alternatives/bzip2.

Il suffit sur ces 2 paquets d'activer le USE pigz pour app-alternatives/gzip et lbzip2 pour app-alternatives/bzip2 et de désactiver le USE reference :

Code BASH :
echo "app-alternatives/gzip pigz -reference" >> /etc/portage/package.use/custom
echo "app-alternatives/bzip2 lbzip2 -reference" >> /etc/portage/package.use/custom


Ensuite on met à jour le système ou on réémerge ces 2 paquets :

Code BASH :
emerge -1av app-alternatives/gzip app-alternatives/bzip2


Pour revenir à gzip et bzip2 officiels, il suffit de désactiver les USE pigz et lbzip2 sans oublier de réactiver le USE reference (ou supprimer les 2 lignes dans le package.use) .

Debian, Fedora, etc.



Dans un premier temps, on installe les 2 paquets :

Code BASH :
dnf install lbzip2 pigz


Pour les distributions qui n'offrent pas de solution officielle, on va devoir ruser.

On ne va surtout pas toucher aux binaires gzip et bzip2, afin de garder les binaires originaux. Et surtout, à chaque mise à jour de gzip ou bzip2, on n'aura pas à refaire les manipulations.

On va donc feinter avec la priorité des binaires du PATH.
Voici le contenu de la variable $PATH sur Fedora (et probablement du même genre sur Debian) :
Code BASH :
/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin


gzip et bzip2 se trouvent dans /usr/bin. Le chemin /usr/local/bin est situé avant dans le PATH.

L'astuce va consister à placer un lien symbolique nommé gzip dans /usr/local/bin pointant sur pigz et un lien symbolique nommé bzip2 dans /usr/local/bin pointant sur lbzip2 :

Code BASH :
ln -sv /usr/bin/pigz /usr/local/bin/gzip
ln -sv /usr/bin/lbzip2 /usr/local/bin/bzip2


Et on fait des liens symboliques sur les outils qui utilisent gzip et lbzip2 :

Code BASH :
ln -sv /usr/local/bin/gzip /usr/local/bin/gunzip
ln -sv /usr/local/bin/gzip /usr/local/bin/zcat
ln -sv /usr/local/bin/bzip2 /usr/local/bin/bunzip2
ln -sv /usr/local/bin/bzip2 /usr/local/bin/bzcat


Pour revenir en arrière, il "suffit" de supprimer ces liens symboliques créés.

Tester



Il est possible de tester en invoquant gzip comme d'habitude et de voir que gzip consomme plus que 100% de CPU.

Je vous propose cette commande qui fait une archive tar utilisant gzip et d'envoyer le tout dans /dev/null (ne consomme pas d'espace sur le disque) :

Code BASH :
tar -cz / > /dev/null


tar-multitherad-via-pigz




Cette page a été vue 5584 fois