6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

マルチスレッドで圧縮処理を高速化

Last updated at Posted at 2019-06-15

はじめに

最近のCPUやストレージは高速なので、zipコマンドで大きなファイルを圧縮するのにそれほどストレスを感じません。

ですが、大きなファイルが幾つもある時は、zipコマンドでアーカイブ&圧縮するのにそれなりに時間がかかると思います。
これは、zipコマンドではCPUのコア数やスレッド数に関わらず、「処理に使っているのは常に1コア」ということが原因だと思われます。

そこで、マルチスレッドを使って圧縮できる"pigz"を使うと、どの程度処理が高速化するのかを試してみました。

使用した環境

  • OS:CentOS 6.10
  • CPU:Core-i3 6100T(2コア4スレッド)
  • メモリ:DDR4-8GB(4GB×2枚)
  • SSD:NVMe 128GB

下準備

  • 以下のスクリプトを実行して、100MBのファイルを10個作成します。
  • 10ファイル程度なら、ddコマンドを10回実行するのもありかもしれません...
mkfile.sh
# !/bin/sh

for i in {1..10}; do
  dd if=/dev/zero of=100M_$i.txt bs=1M count=100
done

テスト方法

  • 上記のコマンドで作成した10ファイルを、1つのファイルにまとめて圧縮する際の処理時間を計測しました。
  • なお、zipコマンドは「アーカイブ」と「圧縮」の2つの機能を持っていますが、gzipコマンドとpigzコマンドは圧縮機能しか持っていないため、tarコマンドと併用しました。
zipを使った圧縮
[root@akagi zip_test2]# time zip 1G.zip *.txt
gzipを使った圧縮
[root@akagi zip_test2]# time tar c ./*.txt | gzip > 1G.tar.gz
pigzを使った圧縮
[root@akagi zip_test2]# time tar c ./*.txt | pigz > 1G.tar.gz

テスト結果

  • zipコマンドおよびgzipコマンドと比べて、pigzコマンドでは処理時間が約半分ほどになりました。
  • コア数の少ないCore-i3でこれだけの差が出るので、コア数の多いサーバー用CPUではさらに大きな差が付くと思われます。
zipコマンド gzipコマンド pigzコマンド
0m5.903s 0m6.080s 0m3.239s

補足

  • 「-p」オプションを指定すると、pigzコマンドの実行時に使われるスレッド数を指定できます。
  • 高速化したいけれども、CPUの全リソースを使われると困る...という時に便利だと思います。
4スレッドで圧縮する
[root@akagi zip_test2]# time tar c ./*.txt | pigz -p 4 > 1G.tar.gz
6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?