Linux - マルチコア CPU で高速圧縮!
Updated:
通常、 Linux の tar
コマンドでファイル等の圧縮を行う場合、 CPU コアを1つしか使用しません。
2つ以上 CPU コアを搭載していることの多い昨今、 CPU コアを全て使用して圧縮を行うと時間の節約になります。
今回、圧縮・解凍をマルチコアで並列に処理してくれる pigz
を使用してみました。
0.前提条件
- Linux Mint 17.2(64bit) での作業を想定。
- Intel Core2Duo CPU E8500 (3.16GHz x 2) での作業を想定。
1. pigz のインストール
Apt パッケージを使用する(但し、最新版ではない可能性が高い)
$ sudo apt-get install pigz
もしくは、最新版アーカイブを取得&展開後、 make
して適当な位置に配置してもよい。(但し、当方の環境ではビルドエラーになった)
$ wget http://zlib.net/pigz/pigz-2.3.3.tar.gz
$ tar zxvf pigz-2.3.3.tar.gz
$ cd pigz-2.3.3
$ make
$ sudo mv ./pigz /usr/local/bin/pigz
$ sudo mv ./unpigz /usr/local/bin/unpigz
2. pigz インストールの確認
$ pigz --version
pigz 2.3
3. 圧縮
比較のため、まず tar
コマンドで圧縮してみる。
(圧縮対象は、サブディレクトリ:2層、ファイル数:121,653個、容量:約100MB の “test” という名称のディレクトリ)
$ time tar zcf test.tar.gz test
real 0m4.711s
user 0m4.402s
sys 0m0.938s
次に、 pigz 圧縮してみる。
ディレクトリを再帰的に圧縮できる -r
もあるが、これはファイルそれぞれが圧縮されてしまうので、 tar
コマンドで一旦ファイルをまとめてから pigz
コマンドで圧縮する。また、デフォルトでは全てのプロセッサを使用するが、同時実行スレッド数を指定する -p
オプション等もある。
$ time tar c test | pigz > test.tar.gz
real 0m2.987s
user 0m4.624s
sys 0m0.682s
ちなみに、単純に1つのファイルを圧縮するだけなら pigz -k test.tar.gz
でよい(-k
は元のファイルを残すオプション)。
さらに、 pigz
コマンドを tar
コマンドのオプションで使用して圧縮してみる。
$ time tar cf test.tar.gz test --use-compress-program=pigz
real 0m2.970s
user 0m4.542s
sys 0m0.632s
4. 解凍
まず、単純に tar
コマンドで圧縮したファイルを解凍してみる。
$ time tar zxf test.tar.gz
real 0m18.441s
user 0m1.813s
sys 0m3.022s
次に、 pigz
で圧縮したファイルを tar
コマンドで解凍してみる。
$ time tar xf test.tar.gz --use-compress-program=pigz
real 0m17.526s
user 0m1.193s
sys 0m3.310s
5. 所感
- コア数 2 の非力な環境でも約 2/3 の速度で圧縮することができたのだが、場合によっては pigz を使用する方が遅くなることもある。
- 今回、解凍についてはそれほど差が認められなかった。
- 当然、環境によって結果は異なるだろう。
従って、当方は明らかに圧縮の高速化が見込める場合のみ pigz を使用することとした。
6. 参考サイト
非力な環境では、それほど積極的に使用したいと思うようなコマンドでもありませんでした。
しかし、コアを複数使用して圧縮・解凍ができる、といういことを認識できたことに若干の喜びを感じた次第です。
以上。
Comments