LoginSignup
9

More than 3 years have passed since last update.

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]

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
9