2009年10月7日水曜日

distcc で並列分散コンパイル

distcc を使うと、複数のマシンで並列分散コンパイルを行うことができるようになり、
処理時間を短縮することができます。
カーネルのビルドや、アプリケーションのビルドに有効です。
Ubuntu での設定をまとめます。

1. apt-get で、distcc をインストールします。

# apt-get install distcc

2. /etc/default/distcc を編集します。

# vi /etc/default/distcc

(編集するのは、下記 3 箇所)

STARTDISTCC="true"

ALLOWEDNETS="192.168.0.0/24"   → アクセスを許可するネットワークを指定

LISTENER="192.168.0.10"        → アクセスを許可する NIC の IP アドレスを指定

3. distcc を起動します。

apt-get でインストールした時点で、自動起動するようにはなっています。

# /etc/init.d/distcc start

4. ビルドを実行する PC (CPU を借りる側) で、環境変数 DISTCC_HOSTS を設定します。

~/.bashrc にでも書いておくと良いです。

$ export DISTCC_HOSTS='localhost 192.168.0.20'
  (localhost と分散先を指定します)

■ 使用例 1: make を実行する場合

$ make -j 10 CC=distcc CXX=distcc

■ 使用例 2: configure を実行する場合

$ CC=distcc CXX=distcc ./configrue
$ make -j 10

■ 使用例 3: kernel をビルドする場合

# MAKEFLAGS="CC=distcc CXX=distcc" CONCURRENCY_LEVEL=10 make-kpkg --initrd kernel_image kernel_headers

ちなみに、CPU を貸す側 PC の処理優先度は、nice 値 25 で実行されます。
(つまり、優先度低)

top の実行結果 (抜粋)

24034 distccd   25   5 37460  34m 4732 R   30  1.7   0:00.90 cc1
 7864 root      20   0 40448  15m 6268 S    1  0.8   0:55.04 Xorg
 8496 masao     20   0 20208 8824 7308 S    1  0.4   0:02.25 metacity
24035 distccd   25   5  5920 4084  844 R    1  0.2   0:00.02 as
 8497 masao     20   0 41008  20m  15m S    0  1.0   0:01.72 gnome-panel
 8540 masao     20   0 52772  20m  10m S    0  1.0   0:05.70 gnome-terminal
23650 distccd   25   5  2100  712  372 S    0  0.0   0:00.13 distccd
23671 distccd   25   5  2100  568  372 S    0  0.0   0:00.19 distccd
23807 distccd   25   5  2100  664  372 S    0  0.0   0:00.09 distccd
24046 distccd   25   5 10908 4924 2152 R    0  0.2   0:00.01 cc1
...

■ 2009/10/08 追記

distccmon-text コマンドを使うと、どの PC で何の処理をしているかモニタリングすることができます。

$ distccmon-text 2  (2 は 2 秒ごとに更新)

5858  Blocked                                                            [0]
 5918  Compile     translate.c                                192.168.0.30[0]
 5700  Compile     log.c                                      192.168.0.30[1]
 5772  Compile     entries.c                                  192.168.0.30[2]
 5873  Compile     questions.c                                192.168.0.20[0]
 5879  Compile     merge.c                                    192.168.0.20[0]
 5868  Compile     lock.c                                     192.168.0.20[0]
 5884  Compile     props.c                                       localhost[0]
 5847  Compile     relocate.c                                    localhost[1]

● distcc, 並列, 分散, build, ビルド, compile, コンパイル, distccmon-text

1 件のコメント:

bros. さんのコメント...

nice 値は標準の優先度 (20) に対する相対値なので、この場合は 5 です (A 型)。