Qbilinux 日記

Linux に関係することだけではなく,最近は一般的なコンピュータやガジェット関係についても記載してます.

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

手元でぼちぼちと Plamo Linux の野良パッケージをいじくっていますが,そのパッケージ形式が tar + xz.

少しずついじってるときには問題にならないんだけど,大量にパッケージを作り直そうとすると xz の圧縮に時間が相当かかりますね.特にラズパイでパッケージ作成を行っているとファイルの圧縮だけで1時間以上かかっていたりすることも.ということで,最近の xz はマルチスレッドに対応しているので,その仕込みを入れられないかなぁと思い,マルチスレッド対応がどれくらいなのかちょっと調べてみました.

ちなみに xz は標準でマルチスレッド対応してますけど,gzip の場合にはデフォルトではマルチスレッド対応してないみたいなので pigz を使わないとダメなのかな?と思ったり.

ということで,kernel のソースパッケージを作る際に xz 圧縮する処理時間と圧縮サイズをざっと確認してみました.
前者が thread 数 10 で xz 圧縮した場合,後者がマルチスレッドを使わずに圧縮した場合です.

$ time tar --create --use-compress-program="xz --threads=10" --exclude initpkg --file aaa.tar.xz kernelsrc/work

real 0m48.808s
user 7m34.247s
sys 0m1.710s

$ ls -al aaa.tar.xz
-rw-r--r-- 1 toshi users 111,654,860 11月 27日 14:15 aaa.tar.xz

$ time tar --create --xz --exclude initpkg --file aaa.tar.xz kernelsrc/work

real 4m37.402s
user 4m37.800s
sys 0m1.636s

$ ls -al aaa.tar.xz
-rw-r--r-- 1 toshi users 110,363,652 11月 27日 14:21 aaa.tar.xz

threads 10 で並列処理すると,処理時間は 1/5 くらいで 2% 程度ファイルサイズが大きくなるみたいですね.スレッド数 10 にしても 1/10 にならないのはまぁ当然ですかね.ファイルの増分はそれほど大きくないし,確実に処理時間は早くはなりますね.ということで積極的に使っていこうかなと.

Plamo Linux でパッケージの作成を行う際に makepkg コマンドを使いますが,引数をつけて実行すれば xz がマルチスレッドで動作するように,個人的にいじっている Plamo の野良環境の方には仕込んでおこうかなと思います.

Plamo 本家側には...とりあえずパッチを投げておこうかなと.

まぁ,xz のマルチスレッドに関しては同じような記事は色々ありますが,あくまで手元でやってみたらこんな感じでしたってことで.