pigz - マルチプロセッサ・マルチコア対応で並列処理を行うモダンな爆速gzip実装

S 20160822 142250

gzipファイル形式のファイルの圧縮時間をできるだけ短くしたい場合「pigz」を使用すると良いかもしれません。マルチプロセッサ・マルチコアを使った並列プログラミングを活用し、圧縮にかかる時間を劇的に短くすることができるモダンなgzipの実装です。

プログラムはデータ圧縮の分野で知られるMark Adler氏によるもの。zlibとpthreadライブラリを使って実装されています。

インストール

pigzはzlib version 1.2.3移行が存在するUNIX系オペレーティングシステムで"make"コマンドを使ってビルドすることができます。

Macの場合Homebrew環境ならば以下のコマンドでインストール可能です。

brew install pigz

実行比較

Linuxカーネル「linux-4.7.tar.gz」を解凍・圧縮する速度を比較してみました。

最初にApple gzipで解凍・圧縮し、次にpigzで解凍・圧縮した時間を比較しています。

+ ORIGINAL_FILE=/Users/sora/Downloads/linux-4.7.tar.gz
+ cp /Users/sora/Downloads/linux-4.7.tar.gz .
+ gzip --version
Apple gzip 251
+ gzip -d linux-4.7.tar.gz

real   	0m2.617s
user   	0m1.978s
sys    	0m0.411s
+ gzip linux-4.7.tar

real   	0m22.528s
user   	0m21.589s
sys    	0m0.585s
+ cp /Users/sora/Downloads/linux-4.7.tar.gz .
+ pigz --version
pigz 2.3.3
+ pigz -d linux-4.7.tar.gz

real   	0m2.170s
user   	0m2.117s
sys    	0m0.828s
+ pigz linux-4.7.tar

real   	0m4.541s
user   	0m31.771s
sys    	0m0.585s

解凍時の時間はそれほど変わりませんが、圧縮時の時間がgzipの場合22.5秒かかっていたのに対し、pigzは4.5秒と1/4の時間で住んでいることが分かります。pigzの場合、userが31.771sとrealよりも大きくなっていることからも並列処理の効果を確認することができます(並列処理がおこなわれるとCPU毎のuser時間が積算されるのです)。

まとめ

圧縮処理が高速化されるgzip実装pigzを紹介しました。

複数のコアを同時に使用することで劇的に圧縮にかかる時間を短くすることができますが、その分処理中のCPU負荷は通常のgzipよりも上昇します。CPU負荷を気にしないと行けないレンタルサーバーやVPS等で使用する場合は気にとめておいた方が良いかもしれません。

Imac タイトル pigz
公式サイト http://zlib.net/pigz/
ソフトアンテナ https://www.softantenna.com/softwares/7456-pigz
説明 マルチプロセッサ・マルチコア対応の並列gzip実装。

スポンサーリンク