Pigz

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Domaine Compression de fichiers
Commande pigz
Contexte Remplaçant parallèle (multi-cœurs) de gzip, format 100% compatible
Voir aussi Gzip (équivalent mono-thread)

pigz (« parallel implementation of gzip ») est une implémentation parallèle de gzip qui exploite plusieurs cœurs CPU pour compresser un fichier. Le format produit reste strictement compatible avec gzip : un fichier .gz créé par pigz se décompresse avec gzip -d ou zcat, et inversement pigz peut décompresser n'importe quel .gz classique.

Intérêt

gzip classique est mono-thread : sur un serveur multi-cœurs, la compression d'un gros fichier (dump SQL, archive de logs, tarball) n'utilise qu'un seul cœur et peut devenir le goulot d'étranglement d'un script de sauvegarde. pigz découpe le flux en blocs compressés en parallèle sur tous les cœurs disponibles, ce qui réduit fortement le temps de compression sur des fichiers volumineux, au prix d'un usage CPU plus élevé (attendu, puisque c'est tout l'intérêt).

La décompression, elle, reste essentiellement mono-thread côté décodage (le format DEFLATE ne se parallélise pas nativement en lecture), pigz n'apporte donc un vrai gain que côté compression.

Installation

apt install pigz          # Debian / Ubuntu
yum install pigz           # RHEL / CentOS
dnf install pigz           # Fedora / RHEL8+

Usage

pigz s'utilise comme un remplacement direct de gzip, avec les mêmes options principales :

pigz fichier.log                  # compresse -> fichier.log.gz (supprime l'original par défaut)
pigz -k fichier.log                # compresse en gardant l'original (-keep)
pigz -d fichier.log.gz              # décompresse (équivalent gzip -d)
pigz -9 fichier.log                 # compression maximale (plus lent, plus petit)
pigz -c fichier.log > fichier.log.gz # écrit sur stdout, ne touche pas l'original

Nombre de threads (-p)

Par défaut, pigz détecte automatiquement le nombre de cœurs disponibles et les utilise tous. L'option -p permet de forcer un nombre de threads précis, utile pour limiter la charge CPU sur un serveur partagé ou pour laisser du CPU disponible aux autres services pendant une sauvegarde :

pigz -p 4 gros_fichier.dump     # limite à 4 threads
pigz -p 1 fichier.log            # revient au comportement mono-thread de gzip

Combinaison avec tar

pigz s'intègre nativement à tar via l'option --use-compress-program, ce qui permet de créer ou d'extraire une archive .tar.gz en exploitant tous les cœurs disponibles :

tar --use-compress-program=pigz -cf archive.tar.gz repertoire/   # archive + compression parallèle
tar --use-compress-program=pigz -xf archive.tar.gz                # extraction (décompression)
tar --use-compress-program="pigz -p 4" -cf archive.tar.gz repertoire/ # en limitant à 4 threads

C'est particulièrement utile pour accélérer les sauvegardes de gros répertoires ou de volumes de données sur des serveurs multi-cœurs, là où tar czf classique resterait bridé par le mono-thread de gzip.

Voir aussi

  • Gzip — l'outil de compression standard, équivalent mono-thread