Activer par défaut le multithread pour gzip et bzip2
Table des matières
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.
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 :
Ensuite on met à jour le système ou on réémerge ces 2 paquets :
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) .
Dans un premier temps, on installe les 2 paquets :
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) :
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 :
Et on fait des liens symboliques sur les outils qui utilisent gzip et lbzip2 :
Pour revenir en arrière, il "suffit" de supprimer ces liens symboliques créés.
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) :
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