テクニカルプア

備忘録と若干の補足

Distccを使って余剰PCで分散コンパイルする&してみた結果

 例えばMozcを使いたいなと思った時、Arch LinuxにおいてMozcはAURにあるので導入にはソースコードからのコンパイルから始まるパッケージの作成が必要である*1。このコンパイルという作業だが、周知の通りマシンスペックによっては時間のかかる作業で、コンパイルが始まったが最後終わるまで待つ必要がある。コンパイルを早く終える手っ取り早い方法は高性能のパソコンを使うことだが、おいそれと高性能マシンを買えるんだったらそもそも問題にならない。しかし、高性能マシンを買う余裕はないが、今までに乗り換えてきたパソコン達が目に付くところに転がっている。このホコリを被って放置されているパソコンを使って分散コンパイルすれば、手っ取り早く、お金を掛けずにコンパイルをさっさと終わらせることができるのではなかろうか。

 というわけで、Distcc(https://code.google.com/p/distcc/)というソフトウェアを使って、Mozcを分散コンパイルしてパッケージを作成してみた。加えて、makepkgの設定ファイルである/etc/makepkg.confを編集し、Distcc、Ccache、MAKEFLAGSの設定によってコンパイルにかかる時間がどれだけ変わるかを参考までに計測してみた。

あらかじめ言及しておくと、それっぽい感じのタイムが出なかったので、環境に不備がある可能性がある。データは参考までに。

 今考えると分散コンパイル試すだけだったらMozcじゃなくてよかった。もっと手軽なやつにしとけばよかった。

 ちなみにCcacheというのはgcc向けのワンダフルなツールである*2

使用マシン

環境

カーネル

X200X61と両方ともLinux-ck 3.11.4-1を使用。

Distcc

通信速度

X200X61との間の通信速度をiperfで計測したところ、2.72Mbpsだった。

makepkg関連

  • /etc/makepkg.conf
    • MAKEFLAGをX200X61共に基本的に-j3にし、BUILDENVの内容(distcc、ccache)を適宜変更した。

結果

 ccache、distcc、MAKEFLAGSの内、容を適宜以下の表のように変更して、それぞれの場合においてのコンパイル時間を計測した。時間の計測にはtimeを使用した。

 なお、時間の計測は一回限りである。前述の通り、データは参考までに。

ccache distcc MAKEFLAGS 時間[秒]
      875.36
    438.30
  -j6(=3+3) 439.66
    -j3 950.98
  -j3 396.67
-j6(=3+3) 395.84
-j6(=3+3) 451.69

(※X200X61両方で有効にした)

 ccache、distcc、MAKEFLAGSを効かせた場合が最速なのはいいとして、それがdistccを無効にした場合と1秒差というのはどうなんだろう。それと何も有効化していない場合よりもMAKEFLAGSを設定したほうが遅いというのも納得がいかない。2,7Mbpsという通信速度もボトルネックになっている気がする。

 再計測の余地がある。

結論

 Distcc便利。

*1:pnsft-purを使えばバイナリが手に入る(https://wiki.archlinux.org/index.php/Mozc)けど出オチなので見なかったことにする。

*2:https://wiki.archlinux.org/index.php/Ccache