ビルドって結構時間かかる。最近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]
makepkg 10837.49s user 692.22s system 695% cpu 27:37.28 total
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にしちゃおうか悩むくらいだ。
計画では、そろそろ自宅サーバを新調する予定なので、それを参加するようにできれば、それでいいかな…