<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Pigz on slash-root.fr</title><link>https://beta.slash-root.fr/tags/pigz/</link><description>Recent content in Pigz on slash-root.fr</description><generator>Hugo -- gohugo.io</generator><language>fr-fr</language><lastBuildDate>Mon, 08 Jul 2024 15:05:42 +0200</lastBuildDate><atom:link href="https://beta.slash-root.fr/tags/pigz/index.xml" rel="self" type="application/rss+xml"/><item><title>Compression Multithreading : pigz (gzip) &amp; pbzip2 (bzip2)</title><link>https://beta.slash-root.fr/compression-multithreading-pigz-gzip-pbzip2-bzip2/</link><pubDate>Mon, 08 Jul 2024 15:05:42 +0200</pubDate><guid>https://beta.slash-root.fr/compression-multithreading-pigz-gzip-pbzip2-bzip2/</guid><description>&lt;img src="https://beta.slash-root.fr/compression-multithreading-pigz-gzip-pbzip2-bzip2/cover.jpg" alt="Featured image of post Compression Multithreading : pigz (gzip) &amp; pbzip2 (bzip2)" /&gt;&lt;h2 id="préambule"&gt;&lt;a href="#pr%c3%a9ambule" class="header-anchor"&gt;&lt;/a&gt;Préambule
&lt;/h2&gt;&lt;p&gt;Dans le monde de la gestion des fichiers et des données, l'efficacité des outils de compression est essentielle, surtout à l'ère des volumes de données croissants. Les formats de compression classiques, &lt;code&gt;gzip&lt;/code&gt; et &lt;code&gt;bzip2&lt;/code&gt;, bien que robustes et largement utilisés, peuvent devenir des goulets d'étranglement sur des systèmes modernes où la puissance de traitement parallèle est sous-exploitée. C'est dans ce contexte que les outils &lt;code&gt;pigz&lt;/code&gt; (Parallel Implementation of gzip) et &lt;code&gt;pbzip2&lt;/code&gt; (Parallel bzip2) apportent une révolution significative en offrant une compression multithreading.&lt;/p&gt;
&lt;p&gt;Cet article explore ces deux outils puissants, en les comparant aux utilitaires classiques, et en démontrant leur utilisation efficace avec &lt;code&gt;tar&lt;/code&gt;, grâce à son option &lt;code&gt;-I&lt;/code&gt; qui permet de spécifier un programme de compression externe. J’aborderai les avantages du multithreading pour la compression des données, présenterai des exemples pratiques d'utilisation, et fournirai des conseils pour optimiser vos flux de travail de gestion des fichiers en tirant parti de la parallélisation.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id="introduction-à-la-compression-multithreading"&gt;&lt;a href="#introduction-%c3%a0-la-compression-multithreading" class="header-anchor"&gt;&lt;/a&gt;Introduction à la compression multithreading
&lt;/h2&gt;&lt;h3 id="contexte-et-importance-de-la-compression-des-fichiers"&gt;&lt;a href="#contexte-et-importance-de-la-compression-des-fichiers" class="header-anchor"&gt;&lt;/a&gt;Contexte et importance de la compression des fichiers
&lt;/h3&gt;&lt;p&gt;La compression des fichiers est cruciale pour économiser l'espace de stockage et réduire la bande passante lors des transferts de fichiers. Les outils classiques comme &lt;code&gt;gzip&lt;/code&gt; et &lt;code&gt;bzip2&lt;/code&gt; sont largement utilisés pour leur efficacité en termes de taux de compression et de compatibilité. Toutefois, sur des systèmes multicœurs modernes, ces outils ne tirent pas parti de la puissance disponible car ils ne fonctionnent que sur un seul thread.&lt;/p&gt;
&lt;h3 id="limites-des-outils-traditionnels-gzip-et-bzip2"&gt;&lt;a href="#limites-des-outils-traditionnels-gzip-et-bzip2" class="header-anchor"&gt;&lt;/a&gt;Limites des outils traditionnels gzip et bzip2
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Single-threaded&lt;/strong&gt; : &lt;code&gt;gzip&lt;/code&gt; et &lt;code&gt;bzip2&lt;/code&gt; ne peuvent exploiter qu'un seul cœur, ce qui limite leur vitesse de compression sur les systèmes modernes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance&lt;/strong&gt; : Bien que &lt;code&gt;gzip&lt;/code&gt; soit rapide pour la compression simple, il ne compresse pas autant que &lt;code&gt;bzip2&lt;/code&gt;. &lt;code&gt;bzip2&lt;/code&gt;, quant à lui, offre une meilleure compression mais à une vitesse plus lente.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id="présentation-de-pigz"&gt;&lt;a href="#pr%c3%a9sentation-de-pigz" class="header-anchor"&gt;&lt;/a&gt;Présentation de pigz
&lt;/h2&gt;&lt;h3 id="fonctionnalités-et-avantages"&gt;&lt;a href="#fonctionnalit%c3%a9s-et-avantages" class="header-anchor"&gt;&lt;/a&gt;Fonctionnalités et avantages
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;pigz&lt;/code&gt; (Parallel Implementation of gzip) est une version multi-thread de &lt;code&gt;gzip&lt;/code&gt;. Il utilise plusieurs cœurs pour accélérer la compression et la décompression tout en maintenant la compatibilité avec le format &lt;code&gt;gzip&lt;/code&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Multithreading&lt;/strong&gt; : Exploite plusieurs cœurs pour améliorer la vitesse de compression.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Compatibilité&lt;/strong&gt; : Produit des fichiers compatibles avec &lt;code&gt;gzip&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Options de compression&lt;/strong&gt; : Offre des options pour ajuster le nombre de threads, le niveau de compression, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="installation-et-configuration"&gt;&lt;a href="#installation-et-configuration" class="header-anchor"&gt;&lt;/a&gt;Installation et configuration
&lt;/h3&gt;&lt;p&gt;Sur une distribution Linux (ex. Debian) :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt install pigz
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="exemples-dutilisation-avec-tar-et-loption--i"&gt;&lt;a href="#exemples-dutilisation-avec-tar-et-loption--i" class="header-anchor"&gt;&lt;/a&gt;Exemples d&amp;rsquo;utilisation avec tar et l&amp;rsquo;option &lt;code&gt;-I&lt;/code&gt;
&lt;/h3&gt;&lt;h4 id="compression"&gt;&lt;a href="#compression" class="header-anchor"&gt;&lt;/a&gt;Compression
&lt;/h4&gt;&lt;p&gt;Pour compresser une archive &lt;code&gt;tar&lt;/code&gt; avec &lt;code&gt;pigz&lt;/code&gt; :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tar -cvI pigz -f archive.tar.gz dossier/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="décompression"&gt;&lt;a href="#d%c3%a9compression" class="header-anchor"&gt;&lt;/a&gt;Décompression
&lt;/h4&gt;&lt;p&gt;Pour décompresser une archive &lt;code&gt;tar.gz&lt;/code&gt; avec &lt;code&gt;pigz&lt;/code&gt; :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tar -xvI pigz -f archive.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr /&gt;
&lt;h2 id="présentation-de-pbzip2"&gt;&lt;a href="#pr%c3%a9sentation-de-pbzip2" class="header-anchor"&gt;&lt;/a&gt;Présentation de pbzip2
&lt;/h2&gt;&lt;h3 id="fonctionnalités-et-avantages-1"&gt;&lt;a href="#fonctionnalit%c3%a9s-et-avantages-1" class="header-anchor"&gt;&lt;/a&gt;Fonctionnalités et avantages
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;pbzip2&lt;/code&gt; (Parallel bzip2) est une version multi-thread de &lt;code&gt;bzip2&lt;/code&gt; qui utilise plusieurs cœurs pour accélérer la compression et la décompression. Il produit des fichiers compatibles avec le format &lt;code&gt;bzip2&lt;/code&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Multithreading&lt;/strong&gt; : Exploite plusieurs cœurs pour améliorer la vitesse de compression.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Compatibilité&lt;/strong&gt; : Produit des fichiers compatibles avec &lt;code&gt;bzip2&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Efficacité de compression&lt;/strong&gt; : Offre généralement une meilleure compression que &lt;code&gt;gzip&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="installation-et-configuration-1"&gt;&lt;a href="#installation-et-configuration-1" class="header-anchor"&gt;&lt;/a&gt;Installation et configuration
&lt;/h3&gt;&lt;p&gt;Sur une distribution Linux (ex. Debian) :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt install pbzip2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="exemples-dutilisation-avec-tar-et-loption--i-1"&gt;&lt;a href="#exemples-dutilisation-avec-tar-et-loption--i-1" class="header-anchor"&gt;&lt;/a&gt;Exemples d&amp;rsquo;utilisation avec tar et l&amp;rsquo;option &lt;code&gt;-I&lt;/code&gt;
&lt;/h3&gt;&lt;h4 id="compression-1"&gt;&lt;a href="#compression-1" class="header-anchor"&gt;&lt;/a&gt;Compression
&lt;/h4&gt;&lt;p&gt;Pour compresser une archive &lt;code&gt;tar&lt;/code&gt; avec &lt;code&gt;pbzip2&lt;/code&gt; :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tar -cvI pbzip2 -f archive.tar.bz2 dossier/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="décompression-1"&gt;&lt;a href="#d%c3%a9compression-1" class="header-anchor"&gt;&lt;/a&gt;Décompression
&lt;/h4&gt;&lt;p&gt;Pour décompresser une archive &lt;code&gt;tar.bz2&lt;/code&gt; avec &lt;code&gt;pbzip2&lt;/code&gt; :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tar -xvI pbzip2 -f archive.tar.bz2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr /&gt;
&lt;h2 id="comparaison-des-performances"&gt;&lt;a href="#comparaison-des-performances" class="header-anchor"&gt;&lt;/a&gt;Comparaison des performances
&lt;/h2&gt;&lt;h3 id="test-de-performance--gzip-vs-pigz-bzip2-vs-pbzip2"&gt;&lt;a href="#test-de-performance--gzip-vs-pigz-bzip2-vs-pbzip2" class="header-anchor"&gt;&lt;/a&gt;Test de performance : gzip vs pigz, bzip2 vs pbzip2
&lt;/h3&gt;&lt;p&gt;Pour évaluer les performances, j’ai compressé et décompressé un dossier de 10 Go de fichiers aléatoires avec &lt;code&gt;gzip&lt;/code&gt;, &lt;code&gt;pigz&lt;/code&gt;, &lt;code&gt;bzip2&lt;/code&gt;, et &lt;code&gt;pbzip2&lt;/code&gt;. Ces tests ont été réalisés sur une machine équipée d’un processeur AMD Ryzen 7 7700X @ 5.573GHz avec 16 threads.&lt;/p&gt;
&lt;h4 id="résultats"&gt;&lt;a href="#r%c3%a9sultats" class="header-anchor"&gt;&lt;/a&gt;Résultats
&lt;/h4&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Outil&lt;/th&gt;
&lt;th&gt;Temps de Compression&lt;/th&gt;
&lt;th&gt;Temps de Décompression&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;gzip&lt;/td&gt;
&lt;td&gt;170 sec&lt;/td&gt;
&lt;td&gt;25 sec&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pigz&lt;/td&gt;
&lt;td&gt;18 sec&lt;/td&gt;
&lt;td&gt;9 sec&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bzip2&lt;/td&gt;
&lt;td&gt;565 sec&lt;/td&gt;
&lt;td&gt;308 sec&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pbzip2&lt;/td&gt;
&lt;td&gt;68 sec&lt;/td&gt;
&lt;td&gt;30 sec&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="analyse-des-résultats-et-recommandations"&gt;&lt;a href="#analyse-des-r%c3%a9sultats-et-recommandations" class="header-anchor"&gt;&lt;/a&gt;Analyse des résultats et recommandations
&lt;/h3&gt;&lt;p&gt;Les outils multithreading &lt;code&gt;pigz&lt;/code&gt; et &lt;code&gt;pbzip2&lt;/code&gt; montrent une nette amélioration par rapport à leurs homologues single-threaded, surtout sur des systèmes avec plusieurs cœurs disponibles. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pour une compression rapide&lt;/strong&gt; : Utilisez &lt;code&gt;pigz&lt;/code&gt; si la vitesse est prioritaire.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pour une compression plus efficace&lt;/strong&gt; : Utilisez &lt;code&gt;pbzip2&lt;/code&gt; si un meilleur taux de compression est nécessaire, tout en profitant d'une vitesse accrue par rapport à &lt;code&gt;bzip2&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id="optimisations"&gt;&lt;a href="#optimisations" class="header-anchor"&gt;&lt;/a&gt;Optimisations
&lt;/h2&gt;&lt;h3 id="conseils-pour-optimiser-les-opérations-de-compression"&gt;&lt;a href="#conseils-pour-optimiser-les-op%c3%a9rations-de-compression" class="header-anchor"&gt;&lt;/a&gt;Conseils pour optimiser les opérations de compression
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Ajuster le Nombre de Threads&lt;/strong&gt; : Utilisez les options &lt;code&gt;-p&lt;/code&gt; de &lt;code&gt;pigz&lt;/code&gt; et &lt;code&gt;-p&lt;/code&gt; de &lt;code&gt;pbzip2&lt;/code&gt; pour ajuster le nombre de threads en fonction du nombre de cœurs disponibles.&lt;/p&gt;
&lt;p&gt;Exemple :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pigz -p &lt;span style="color:#ae81ff"&gt;8&lt;/span&gt; -c fichier &amp;gt; fichier.gz
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pbzip2 -p8 fichier
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Combinaison avec tar&lt;/strong&gt; : Utilisez l'option &lt;code&gt;-I&lt;/code&gt; de &lt;code&gt;tar&lt;/code&gt; pour spécifier le programme de compression, simplifiant ainsi les commandes complexes.&lt;/p&gt;
&lt;p&gt;Exemple :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tar -cvI &lt;span style="color:#e6db74"&gt;&amp;#34;pigz -p 4&amp;#34;&lt;/span&gt; -f archive.tar.gz dossier/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Surveiller l'Utilisation des Ressources&lt;/strong&gt; : Utilisez des outils comme &lt;code&gt;htop&lt;/code&gt; ou &lt;code&gt;top&lt;/code&gt; pour surveiller l'utilisation des ressources et ajuster les paramètres de compression en conséquence.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id="conclusion"&gt;&lt;a href="#conclusion" class="header-anchor"&gt;&lt;/a&gt;Conclusion
&lt;/h2&gt;&lt;p&gt;La compression multithreading, grâce à des outils comme &lt;code&gt;pigz&lt;/code&gt; et &lt;code&gt;pbzip2&lt;/code&gt;, représente une avancée significative par rapport aux méthodes traditionnelles. En exploitant les capacités des systèmes multicœurs, ces outils offrent des performances de compression et de décompression bien supérieures. Que vous ayez besoin de rapidité avec &lt;code&gt;pigz&lt;/code&gt; ou d'une compression plus efficace avec &lt;code&gt;pbzip2&lt;/code&gt;, intégrer ces outils dans vos flux de travail peut transformer la gestion des fichiers et des archives, rendant vos processus plus efficaces et adaptés aux environnements modernes.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id="références"&gt;&lt;a href="#r%c3%a9f%c3%a9rences" class="header-anchor"&gt;&lt;/a&gt;Références
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://zlib.net/pigz/"&gt;Documentation de pigz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://compression.ca/pbzip2/"&gt;Documentation de pbzip2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.gnu.org/software/tar/manual/tar.html"&gt;Documentation GNU tar&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>