tar での圧縮を複数CPU処理で高速化する

ALL
スポンサーリンク

tar コマンドは、-I オプションで圧縮に使用するコマンドを指定できます。
このコマンドに pbzip2 を指定すると、複数CPUを使って処理を行い、短い時間で完了します。
pbzip2 ではオプションで使用するCPU数を指定でき、CPU数に応じて実行時間がどう変わるか、計測してみました。

なお、pbzip2 は例えば Ubuntu では次のようにしてインストールします。

sudo apt install pbzip2

測定方法

Corei7-6700 の CPU数8(コア数4,ハイパースレッディングにより論理CPU数8)のPCで測定しました。

並列処理をしない、素の tar の実行と、複数CPUを使用して並列処理する pbzip2 を使用した場合を測定しました。
複数CPUでは、CPU数 2,4,6,8 です。

実行時間は time コマンドで下記のように計測しました。
テスト用 Ubuntu環境の圧縮を実施しています。

通常の tar を使用した場合です。

time tar -cjf /mnt/hdd2/backup.tar.bz2 -X /mnt/hdd2/exclude_list.txt /

tar で pbzip2 を使用する場合です。
下記の X の個所にCPU数を指定しています。

time tar -I "pbzip2 -pX" -cf /mnt/hdd2/backup.tar.bz2 -X /mnt/hdd2/exclude_list.txt /

実行結果で表示される real の個所の値を、実行時間としています。

生成される backup.tar.bz2 のサイズは3GBでした。
また backup.tar.bz2 は、新規作成/上書きの違いで結果に影響しないように、テストの度に消しています。

測定結果

通常の tar を使用した場合、実行時間は 11分22秒でした。

pbzip2 を使用した場合の結果は次のようになりました。
tar コマンド単体に比べて、かなり短くなっています。

CPU数8が最速ですが、この例では CPU数6でも、実行時間はそれほど増えずにCPU負荷を抑えられています。
圧縮中にも他の作業ができますね。
CPU数4にすると、CPU負荷はもっと余裕が出ますが、実行時間が若干伸びます。

CPU数 CPU負荷(%) 実行時間
2 40 5分58秒
4 70 3分50秒
6 90 3分10秒
8 100 3分5秒

参考

マルチスレッド環境でのtar – みつきんのメモ

コメント