お茶漬けぶろぐ

distccでmakepkgの高速化を狙う

ビルドって結構時間かかる。最近telegram-desktop - aurがしょっちゅうバージョンアップするわけだが、これ、Qtのstatic版を手元で毎度ビルドするのだ。まぁそれを保持しておいてくれればいいんだけど、これの他にも色々ビルドすることはあるので、PKGBUILDからビルドしてくれるmakepkgを高速化してやりたい。

makeに手作業で-jとかつけて回っても良いが、せっかく手元にマシンが複数あるので、分散ビルドさせてみたほうが面白いのでは?つーわけで、distccをつかう。

基本的にはDistcc - ArchWikiの通りの作業でおk。

一応記しておこう。

状況は以下のとおり。

参加するホスト:マスター(192.168.0.55)、スレーブ(192.168.0.70)

マスターのCPU:Core i7 870(4C/8T)、スレーブのCPU:Celeron G550(2C/2T)

インストールはdistccパッケージを放り込めばおk、マスターにもスレーブにもインストールしよう。

スレーブの設定は/etc/conf.d/distccdを多少いじるのみ。

DISTCC_ARGS=”–allow 192.168.0.0/24”

の行をそれらしくしたら、systemctl start distccdすればおk

マスターでは/etc/makepkg.confをいじる。

・BUILDENVでdistccの前のビックリマークを切る

・DISTCC_HOSTSでジョブを実行するホストとそこのスレッド数を指定する(パワーが強い順にする)

・MAKEFLAGSで全スレッド数を合計したものを指定する

DISTCC_HOSTS=”localhost/8 192.168.0.70/2”
MAKEFLAGS=”-j10”

以上で設定はおしまい。パフォーマンス比較ということで、Linuxカーネルをビルドしてみよう。

[bash]
$ cd
$ mkdir kernel_build && cd kernel_build
$ ABSROOT=. abs core/linux
$ cd ./core./linux
$ vim PKGBUILD
$ makepkg
$ sudo pacman -S xmlto
$ time makepkg
[/bash]

鍵の検証が出来ないとかなんとか言われたので、ひとまず.signをなかったことにしておいた。

先にmakepkgを実行してやれば、必要なもので今入っていないパッケージがどれかわかる。というわけでxmltoだけ手動でインストールした。

最後は実際のビルドと計測である。

distcc有効/無効でtimeの出力は以下の通り

[bash]

distcc無効

makepkg 10837.49s user 692.22s system 695% cpu 27:37.28 total

distcc有効

makepkg  8178.88s user 584.70s system 560% cpu 26:02.75 total
[/bash]

多少早くなっているみたい(認識が雑)

ビルド中の様子はdistccmon-{text,gnome}で確認できる。gnomeだと様子が視覚的に見えておもしろい。

[caption id=”attachment_419” align=”alignnone” width=”300”] telegram-desktopビルド中[/caption]

我が家にあるCPUは以下の通り

・Pentium DualCore E5300(自宅サーバ、Ubuntu16.04)
・Celeron G550(今回スレーブで使ったクソショボCPU、ArchLinux)
・Core i7 870(旧メインマシン、諸々作業所、ArchLinux)
・Core i7 6700K(現メインマシン、Windows10)
・AthlonII X2 250e(録画機、Windows7)

自宅サーバは違うディストロなのでコンパイラバージョンが食い違っていることが予想される(上にパワーが死ぬほど無い)ので組み込みにくい。あとはWindowsなので組み込むのダルい…メインマシンをArchLinuxにしちゃおうか悩むくらいだ。

計画では、そろそろ自宅サーバを新調する予定なので、それを参加するようにできれば、それでいいかな…

< SQLのデータベース操作(いつも忘れる)

systemd-nspawnでコンテナをブリッジ接続する >