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-essentials
とvim
も使いたいので入れます。
$ 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]