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

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負荷(%)実行時間
2405分58秒
4703分50秒
6903分10秒
81003分5秒




参考


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

この記事へのコメント