マルチスレッド対応の圧縮コマンド

SDカードのイメージファイルを作成し、圧縮ファイルを作った。このとき、結構時間がかかった。システムモニタを見ていたところ、マルチコアにもかかわらず、1つかせいぜい2つのスレッドしか使われていなかった。そこで、マルチスレッド版の圧縮コマンドがないかぐぐったところ、やっぱりあった。(^^)

qiita.com

シングルスレッドなgzip だとこんな感じ。

$ time sudo dd if=/dev/sda bs=8M | gzip -c > sdcardimg_org.img.gz
1910+0 レコード入力
1910+0 レコード出力
16022241280 bytes (16 GB, 15 GiB) copied, 710.228 s, 22.6 MB/s

real 11m50.237s
user 4m30.003s
sys 0m13.834s

 これに対して、マルチスレッドの xz だと

$ time sudo dd if=/dev/sda bs=8M | pxz -c > sdcardimg_org.img.xz
1910+0 レコード入力
1910+0 レコード出力
16022241280 bytes (16 GB, 15 GiB) copied, 278.309 s, 57.6 MB/s

real 4m39.045s
user 78m52.949s
sys 0m40.581s

 と、約3倍の速度がでた!このときのシステムモニタの様子がこれ。

f:id:kzono:20190125202436p:plain

pxz マルチスレッドでの圧縮