Posted at

複数台のRaspberry Piで分散コンパイルし高速ビルド

Raspberry Piでビルドすると非力で時間かかって辛いので、たくさんRaspberry Piを用意し、

distccを使って負荷を分散させ高速化しようという試み。


材料

Raspberry Pi 3 × 3

とりあえず、Raspberry Pi3台構成で、

1台をmaster(172.16.83.66)にして、残り2台をslave(172.16.83.67、172.16.83.68)という構成です。

あとはmicroSDとかLANケーブルとかルーターとか電源とかいろいろ準備します。

OSはRaspbian。


masterもslaveも共通の作業


いつも最初にやるやつ

とりあえず最新に、build-essentialsvimも使いたいので入れます。

$ sudo apt-get -y update

$ sudo apt-get -y upgrad
$ sudo apt-get -y install build-essentials vim


distccをインストール

sudo apt-get -y install distcc


config設定

$ sudo vim /etc/default/distcc


/etc/default/distcc

STARTDISTCC="true"

ALLOWEDNETS="0.0.0.0/0"
LISTENER=""
JOBS="4"
ZEROCONF="false"

これは全許可設定なので嫌な方は絞ってください。

JOBS にはコア数を記述します。

ここまでがslaveでもやる作業


masterのみの作業


環境変数に実行マシンのIPアドレスを登録

$ export DISTCC_HOSTS="172.16.83.66 172.16.83.67 172.16.83.68"

いつも使用するhostが固定な場合は、/etc/distcc/hosts に記述してもOKです。


実行

$ CC="distcc gcc" CXX="distcc g++" make -j 12

-j には全台の使用するコア数(4コア×3台 = 12)を設定


計測してみる

OpenframeWorksのサンプルを試しにビルドしてみました。


普通にビルドした場合

$ time make 

real 18m15.392s
user 17m38.395s
sys 0m41.810s


distccを使用した場合

$ time CC="distcc gcc" CXX="distcc g++" make -j 12

real 6m23.335s
user 5m20.043s
sys 0m38.650s

ちゃんと3倍くらいの速度になっていて良い感じです。


今どのhostで処理しているかを確認

ちゃんと働いているか気になるときは distccmon-text で確認できます。

$ watch distccmon-text

15159 Compile ofSystemUtils.cpp 172.16.83.66[0]
15198 Compile ofFileUtils.cpp 172.16.83.66[1]
15372 Compile ofRendererCollection.cpp 172.16.83.66[3]
15172 Compile ofURLFileLoader.cpp 172.16.83.67[0]
15211 Compile ofXml.cpp 172.16.83.67[1]
15359 Compile ofGraphics.cpp 172.16.83.67[2]
15289 Compile ofEvents.cpp 172.16.83.67[3]
15185 Compile ofUtils.cpp 172.16.83.68[0]
15224 Compile ofMatrixStack.cpp 172.16.83.68[1]
15346 Compile ofBitmapFont.cpp 172.16.83.68[2]
15300 Compile ofPath.cpp 172.16.83.68[3]
15397 Preprocess localhost[0]