1.5 分散ビルドの環境構築 #
ネイティブ開発環境では、汎用PCと比較すると、エッジゲートウェイのCPU処理能力のパフォーマンスが劣ります。そのため、クロス開発環境のビルド時間と比較すると、多くの時間が費やされます。プログラムの規模が大きくなると、この差は顕著になります。
以下では、distccを使った分散ビルド環境を構築することで、ネイティブ開発環境のビルド処理を高速化する方法について説明します。
1.5.1 PC環境の準備 #
ビルド処理の分散先として、ホスト側を利用します。
distcc/ccacheパッケージのインストール
PC側のUbuntu環境で、aptパッケージリストの更新とアップグレードをして、以下のaptパッケージをインストールしてください。
実行環境: ホストマシン(PC)
$ sudo apt install distcc ccache
distccの設定ファイルの修正
/etc/default/distccの以下の箇所を編集します。
実行環境: ホストマシン(PC)
# Defaults for distcc initscript
# sourced by /etc/init.d/distcc
#
# should distcc be started on boot?
#
STARTDISTCC="true" # STARTDISTCC="false"を"true"にする
#
# Which networks/hosts should be allowed to connect to the daemon?
# You can list multiple hosts/networks separated by spaces.
# Networks have to be in CIDR notation, f.e. 192.168.0.0/24
# Hosts are represented by a single IP Adress
#
ALLOWEDNETS="192.168.0.0/24" # ALLOWEDNETS=に依頼元(エッジゲートウェイ)のIPアドレスを含むサブネットを指定する
#
# Which interface should distccd listen on?
# You can specify a single interface, identified by it's IP address, here.
#
LISTENER="192.168.0.1" # LISTENER=にPCのIPアドレス(エッジゲートウェイからアクセス可能なインターフェイスのIPアドレス)を指定する
#
# You can specify a (positive) nice level for the distcc process here
#
NICE="10" # NICE(優先度高-20~19優先度低)を指定する。ご使用の開発環境に合わせて設定してください。
#
# You can specify a maximum number of jobs, the server will accept concurrently
#
JOBS="8" # 分散ビルドするJOB数を指定。ご使用の開発環境に合わせて設定してください。
#
# Enable Zeroconf support?
# If enabled, distccd will register via mDNS/DNS-SD.
# It can then automatically be found by zeroconf enabled distcc clients
# without the need of a manually configured host list.
#
# ZEROCONF="true"
ZEROCONF="false"
distccデーモンの再起動
実行環境: ホストマシン(PC)
$ sudo systemctl daemon-reload
$ sudo systemctl enable distcc
$ sudo systemctl restart distcc
$ ss -ltn | grep 3632
LISTENER に指定した IP アドレス(例では 192.168.0.1)の 3632 番ポート(distcc)が LISTEN になっていることを確認します。
補足: 以前の版の本書では
netstat -a | grep distccで確認していました。Ubuntu 24.04 LTS のホストマシンには、netstat(net-tools パッケージ)が標準では入っていません。
1.5.2 エッジゲートウェイの準備 #
ホスト側と同様に、distcc/ccacheのインストール、設定ファイルの編集、デーモンの再起動をします。
ただし、設定ファイルは、STARTDISTCCのみを変更します。
補足: ホストマシン(PC)とエッジゲートウェイでは、同じメジャーバージョンの gcc を使ってください。distcc は、分散先でも同じコンパイラーでコンパイルされることを前提にしています。エッジゲートウェイの gcc は、『1.4 ネイティブ開発環境』の手順でインストールしたものです。
distcc/ccacheパッケージのインストール
実行環境: エッジゲートウェイ
admin@amnimo:~$ sudo apt install distcc ccache
distccの設定ファイルの修正
/etc/default/distccの以下の箇所を編集します。
実行環境: エッジゲートウェイ
# Defaults for distcc initscript
# sourced by /etc/init.d/distcc
#
# should distcc be started on boot?
#
STARTDISTCC="true" # STARTDISTCC="false"を"true"にする
# 以降はデフォルト
…
distccデーモンの再起動
実行環境: エッジゲートウェイ
admin@amnimo:~$ sudo systemctl daemon-reload
admin@amnimo:~$ sudo systemctl enable distcc
admin@amnimo:~$ sudo systemctl restart distcc
admin@amnimo:~$ netstat -a | grep distcc
tcp 0 0 localhost:distcc 0.0.0.0:* LISTEN ←出力されることを確認
環境変数の設定
分散ビルドの環境変数を設定します。/usr/bin/aarch64-linux-gnu-gcc などのコマンドは、『1.4 ネイティブ開発環境』で gcc などをインストールした後に使えるようになります。
実行環境: エッジゲートウェイ
export CCACHE_PREFIX=distcc
export CC="ccache /usr/bin/aarch64-linux-gnu-gcc"
export CXX="ccache /usr/bin/aarch64-linux-gnu-g++"
export AS="/usr/bin/aarch64-linux-gnu-as"
export AR="/usr/bin/aarch64-linux-gnu-ar"
export CPP="/usr/bin/aarch64-linux-gnu-cpp"
export LD="/usr/bin/aarch64-linux-gnu-ld"
export PKG_CONFIG="/usr/bin/aarch64-linux-gnu-pkg-config"
export DISTCC_HOSTS="192.168.0.1/8 127.0.0.1"
補足: DISTCC_HOSTS
複数のIPアドレスを追加することができます。左から右方向に、能力の高いサーバーから低いサーバーの順に並べてください。
DISTCC_HOSTSに設定した順で処理を振り分けます。対象のIPアドレスのdistccと接続できない場合、次に指定したIPアドレスに処理が振り分けられます。
192.168.0.1/8の8は同時に実行するスレッド数を示します。省略すると、デフォルト値として4が設定されます。分散先distccの設定ファイルのJOBSと同じ数値を指定してください。
1.5.3 分散ビルドの実行 #
makeを用いる場合の並行処理指定
Makefileがあるビルド環境を前提に説明します。-jに続けて数値を指定することで、並行処理の数を指定することが可能です。
実行環境: エッジゲートウェイ
admin@amnimo:~$ make -j8
分散ビルド状態の確認
distccの動作状況は、以下のコマンドで確認することができます。
実行環境: エッジゲートウェイ
admin@amnimo:~$ watch distccmon-text
正常動作
8999 Compile yyy.c 127.0.0.1[1]
9100 Compile zzz.c 192.168.0.1[0]
9094 Compile aaa.c 192.168.0.1[1]
Ctrl+C で終了します。

補足: 以前の版の本書では