pigz 2.8 decoupe la entree en blocs de 128 KB et ecrit un gzip ordinaire
Résumé
pigz est la mise en oeuvre parallele de gzip : la entree est coupee en blocs de 128 KB repartis sur les coeurs, tandis que la sortie reste un gzip ordinaire. La version 2.8 date de aout 2023, et la decompression reste sur un seul fil.
Recommander- Nom
- pigz
- Version
- 2.8
- Tarif
- Gratuit
- Open source
- Open source
- Système
- Linux
- Mis à jour
- 2026-10-23 21:28
pigz est la mise en oeuvre parallele de gzip, ecrite par Mark Adler en 2007, et le nom reprend simplement les initiales de cette phrase. La entree est coupee en blocs de 128 KB, confiee a plusieurs coeurs en meme temps, et le resultat revient comme une seule archive gzip ordinaire. La version affichee sur la page officielle de source est 2.8, datee du 19 aout 2023.
Apres 2.8, le numero de version est reste trois ans immobile
La page de source porte la ligne pigz source code version 2.8 (19 Aug 2023), avec une archive de 118K a cote, puis une somme SHA-256 et une signature GPG. Les envois dans le depot du code s arretent aussi en aout 2023, et le message du dernier tient sur une ligne : version 2.8.
Trois ans sans sortie ne veut pas dire projet a l arret. Le format DEFLATE est fixe depuis longtemps, les decompresseurs existent partout, et un outil dont le seul metier est de repartir la compression sur des coeurs n a aucune raison de changer tant que ce qui entre et ce qui sort restent les memes. La version 2.8 a touche des details : ecrire la date de modification seulement sur les fichiers ordinaires, accepter le numero de version de zlib en deux parties, et quelques reparations autour des assertions et des pointeurs nuls. Ce genre de retouche faite, la surface des fonctions se ferme.
Un bloc de 128 KB, compresse, puis recousu
La methode ne fait pas de detour. La entree est taillee en blocs de 128 KB, chacun compresse seul, et la somme de controle de chacun se calcule en parallele au passage. Un fil de ecriture reassemble les morceaux dans le ordre d origine, fond les sommes en une seule a la fin, et enveloppe le tout dans un en tete et une queue de gzip. Ce qui sort est le genre de fichier que tout decompresseur reconnait, sans rien qui trahisse le travail par morceaux.
Compresser par blocs coute en general un peu de taux, car un bloc tardif ne voit pas le contexte du precedent. pigz compense : avant qu un bloc commence, les 32K derniers du precedent entrent comme dictionnaire prealable, ce qui revient a apporter la fenetre de histoire que un seul fil de deflate aurait eue gratuitement. Au reassemblage, chaque bloc doit finir sur une frontiere de octets, ce qui ajoute quatre ou cinq octets de frais ; contre un bloc de plus de cent kilo-octets, cela disparait.
Deux vis : nombre de fils et taille de bloc
Le nombre de fils suit par defaut les processeurs en marche, un par coeur, et -p le change ; un -p 1 retire toute la filature et revient au chemin du gzip ordinaire. La taille de bloc vaut 128K par defaut et -b la change. Des blocs plus gros aident le taux et nuisent au parallelisme ; des blocs plus petits remplissent mieux les coeurs et cedent un peu sur le taux comme sur les frais. Ces deux la sont le moyen principal de echanger du temps contre de la taille.
Il demande tres peu a son milieu. La notice officielle dit qu il ne depend que de zlib et de pthread, sans code etranger glisse dedans, ce qui explique qu il se compile sur toutes les variantes de Unix. zlib doit etre au moins 1.2.3, et l auteur prefere quelque chose apres 1.2.6, ou les frais entre blocs se serrent plus petit.
La decompression ne se parallelise pas
Un flux de deflate s emboite avant et arriere, donc un lecteur doit le suivre dans le ordre, sauf si le compresseur a coupe le flux en blocs lisibles chacun seul. pigz decompresse donc avec un seul fil principal et en lance trois autres pour la lecture, la ecriture et le calcul des sommes. Cela peut etre plus rapide dans certaines situations, mais ce ne est pas repartir la decompression sur chaque coeur. Pour tout tenir sur un fil, on ecrit -dp 1 ou -tp 1.
Cela eclaire un malentendu courant : un fichier compresse avec pigz ne se decompresse pas plus vite. Le temps gagne du cote compression ne se retrouve pas de le autre. Les deux cotes gagnent seulement si le compresseur a employe le mode de blocs independants decrit ensuite.
Ce que -i achete, ce sont des sauts et de la tolerance
Avec -i ou --independent, les blocs ne renvoient plus aux dictionnaires des autres et chacun se lit seul. Deux avantages suivent : si un bloc est abime, les autres se lisent encore, et sauter droit au milieu de un fichier ne demande pas de lire depuis le debut. Pour que le lecteur trouve les frontieres, neuf octets fixes sont inseres avant chaque bloc, en hexadecimal 00 00 FF FF 00 00 00 FF FF. Le prix est un taux revenu au niveau du simple decoupage, la compensation du dictionnaire prealable ayant disparu.
De -0 a -11
Les niveaux suivent gzip : -0 range sans compresser, -9 serre le plus fort et le plus lentement, et la valeur par defaut tombe sur -6. pigz ajoute un -11, qui fait tourner et retourner le algorithme zopfli de Jyrki Alakuijala et arrache quelques pour cent de plus, a un cout lourd en temps de execution, selon les mots de la notice. Autour de -11 se tient un groupe de reglages propres : quinze repetitions par defaut, quinze blocs au maximum, et le choix soit de ne pas decouper du tout, soit de repeter puis decouper.
Le format de sortie est un des trois : gzip par defaut, le .zz de zlib avec -z, un zip a un seul element avec -K. Il y a aussi -R, qui fait suivre les points de coupe au contenu, si bien qu apres une petite modification les parties inchangees restent aux memes endroits et une transmission de difference ne porte que ce qui a bouge. Les gros tas de journaux et de sauvegardes, ou beaucoup passe en une fois, sont le lieu ou blocs et coeurs font vraiment gagner du temps.
Une licence en trois phrases
pigz emploie la licence accommodante de zlib : chacun peut utiliser le logiciel pour tout usage, le modifier, le redistribuer. Trois choses sont demandees. Ne pas pretendre l avoir ecrit, marquer les versions modifiees, et laisser la notice en place. Mark Adler est aussi un des deux auteurs de zlib, et le site de zlib dit que la moitie de la decompression lui revient ; le tour de blocs et de dictionnaire dans pigz sort du meme tiroir que la bibliotheque quil tient.
La page officielle explique comment dire le nom : pig-zee, pas le pluriel de pig. Trouver cette question traitee sur la premiere page dit quelque chose du temperament du projet. La documentation tient sur une page, les reglages vivent dans le manuel, et le reste est laisse a la source.
Repartir la compression sur des coeurs est la seule chose que pigz vend, et c est aussi pourquoi vingt ans ont demande seulement de petites reparations : le format de gzip ne a pas change, donc ce que l outil sait faire ne a pas change non plus. Le reproche honnete reste que la decompression tient toujours sur un fil, et que la vitesse est toute du cote compression.