distcc†
- distcc は、C/C++/Objective-C/Objective-C++ のビルドをネットワーク上の複数の host に分散して行う機能を実現する。
setup†
- distcc によるクラスタを構成する各 host は、同じバージョンのコンパイラがインストールされている必要がある。
- -march=native オプションは使えない
- CGG 4.3.0 からサポートされたもので、CPU自動判別と最適化の機能を有効にするオプション。
- このオプションを使用すると、それぞれのプロセッサでの最適化されたコードが生成され、それらが混在してしまうことになる。(クラスタを構成する host が全て同じ CPU を積んでいるなら問題なさそう)
setup (master, slave 共通)†
- 全てのマシンに distcc パッケージをインストールする
- /etc/default/distcc
- 記述例
# Defaults for distcc initscript
# sourced by /etc/init.d/distcc
#
# should distcc be started on boot?
#
# マシンの起動時に distccd を自動起動する場合は true にする。
STARTDISTCC="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, e.g. 192.168.1.0/24
# Hosts are represented by a single IP address
#
# distcc の命令を受けるホストを IP address の範囲で指定
ALLOWEDNETS="192.168.0.0/24"
#
# Which interface should distccd listen on?
# You can specify a single interface, identified by it's IP address, here.
#
# LISTENER="127.0.0.1"
# distcc の命令を listen するインターフェース(=自機の IP address)
LISTENER="192.168.100.12"
#
# You can specify a (positive) nice level for the distcc process here
#
# 引き受ける Job の優先度(高:-20〜19:低)
NICE="10"
#
# You can specify a maximum number of jobs, the server will accept concurrently
#
# 引き受ける job の上限数(マシンの性能・運用方針によって設定する)
JOBS="4"
#
# 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.
#
# zeloconf 環境を構築している場合は true にする。
ZEROCONF="false"
setup (master)†
環境変数 DISTCC_HOSTS の設定†
- distcc の命令を受けるホストの "IP address/多重度" を指定する。多重度は省略すると 4 になる。
- 以下のいずれかの方法で設定する。
- 環境変数を直接設定する
$ export DISTCC_HOSTS="192.168.0.0/8 192.169.1.0/4 localhost"
- 複数エントリを指定する場合は、エントリ間を半角スペースで区切る
- ${HOME}/.distcc/hosts に記載する
192.168.0.0/8,lzo 192.169.1.0/4,cpp,lzo localhost
- 複数エントリを指定する場合は、エントリ間を半角スペースで区切る
- --randomize を指定したい場合も、 ${HOME}/.distcc/hosts に記載すれば良い。
- , の後に、各ホストに対するオプションを指定出来る
option | description | remark |
lzo | TCP 又は SSH で転送するこのホストで LZO 圧縮を有効にする | |
cpp | distcc-pump mode をこのホストに対して有効にする | |
auth | GSSAPI-based mutual authentication をこのホストで有効にする | |
- 注意
- DISTCC_HOSTS の設定に於いて、環境変数(方法1)と ${HOME}/.distcc/hosts (方法2)の両方を設定した場合、distcc 起動直前に設定している方法1での設定が優先され、それ以外の設定は無視される。
option | description | remark |
--randomize | job を投げる対象ホストのオーダーをランダムにする | 指定しない場合、jpb を投げられるホストは環境変数 DISTCC_HOSTS で先に指定された順に偏重する |
+zeroconf | | distcc のビルド時に avahi support が有効になっているときのみ使える |
setup (slave)†
monitor†
- distccmon-gnome
- GUI の distcc モニタ
- distccmon-gnome パッケージでインストールする。
- distccmon-text
- distcc パッケージに含まれている。
ccache と併用する†
- ccache パッケージを master ホストにインストールする
- コンパイラコマンドを置換する
- 方法1:Makefile の記載を変える
(変更前) CC := gcc
(変更後) CC := ccache distcc gcc
- 方法2:コマンドを置き換える で設定する置き換えコマンドの中身を下記のようにする(ccache を追記):
#!/bin/bash
ccache distcc gcc ${@}
- 方法3:configure で設定する場合
CC="ccache distcc gcc" CXX="ccache distcc g++" ./configure
gcc wrapper†
- ${HOME}/bin/gcc (or g++, clang, clang++, gobjc, gobjc++)
#!/bin/bash
IS_MONITOR_EXISTS=$(pgrep distccmon-gnome | wc -l);
if [ ${IS_MONITOR_EXISTS} -eq 0 ]; then
DISPLAY=${DISPLAY} distccmon-gnome &
fi
unset IS_MONITOR_EXISTS;
CMD_CCHACHE=
IS_CCACHE_EXISTS=$(which ccache | wc -l);
if [ ${IS_CCACHE_EXISTS} -ne 0 ]; then
CMD_CCHACHE=ccache
fi
${CMD_CCACHE} distcc gcc ${@}
参考リンク†