-->

2009-12-02

違うcpuでdistccを使う

2010-7-11 追記 この記事は間違っています。

この記事は違うcpuでdistccを使う際の参考です。

この例の場合の条件
ネットワーク => 192.168.0.0/24(192.168.0.0/255.255.255.0)
CPUが新しい  => phenom(192.168.0.100)
CPUが古い    => pen3(192.168.0.200)

192.168.0.200 で現在のバージョンを確認します。
$ emerge -pv binutils gcc linux-headers glibc

192.168.0.100 で現在のバージョンを確認します。
emerge -pv cross-i686-pc-linux-gnu/binutils cross-i686-pc-linux-gnu/gcc cross-i686-pc-linux-gnu/linux-headers cross-i686-pc-linux-gnu/glibc

192.168.0.100 でマッチするバージョンをインストールします。
USEをそろえます。multilib はCPUを貸す側には追加されます。
crossdev でインストールします。
USE="-gtk -multilib -openmp mudflap" crossdev -t i686-pc-linux-gnu --binutils 2.18-r3 --gcc 4.3.4 --kernel 2.6.27-r2 --libc 2.9_p20081201-r2

192.168.0.100 で /etc/conf.d/distccd に設定します。
一つのサーバーでIPアドレスが複数ある場合は設定します。
DISTCCD_OPTS="${DISTCCD_OPTS} --listen 192.168.0.100"

192.168.0.200 で/etc/conf.d/distccdに設定します。
一つのサーバーでIPアドレスが複数ある場合は設定します。
DISTCCD_OPTS="${DISTCCD_OPTS} --listen 192.168.0.200"

192.168.0.200 で設定します。
$ distcc-config --set-hosts "192.168.0.100"

192.168.0.200 で /etc/portage/package.mask に設定します。
>sys-devel/binutils-2.18-r3
>sys-kernel/linux-headers-2.6.27-r2
>sys-devel/gcc-4.3.4
>sys-libs/glibc-2.9_p20081201-r2

192.168.0.200 で /etc/make.conf に設定します。
ccache を手前にすると ccache が先になります。
FEATURES="ccache distcc"        # ccache, distcc を使う
DISTCC_HOSTS="192.168.0.100"    # distcc のCPUに余裕のあるIPアドレスの指定
CCACHE_SIZE="2G"                # ccache のキャッシュファイルの最大容量
CCACHE_DIR="/var/tmp/ccache"    # ccache の保存ディレクトリ
MAKEOPTS="-j3"                  # emerge の gcc に渡す同時実行数(pump とは異なる)

192.168.0.100 で /etc/portage/package.mask に設定します。
>cross-i686-pc-linux-gnu/binutils-2.18-r3
>cross-i686-pc-linux-gnu/gcc-4.3.4
>cross-i686-pc-linux-gnu/linux-headers-2.6.27-r2
>cross-i686-pc-linux-gnu/glibc-2.9_p20081201-r2

両方のサーバーでdistccを起動します。
$ rc-update add distccd default
$ /etc/init.d/distccd restart

192.168.0.200 で /etc/make.conf の -march=native を分解します。
-march=native をコンパイルオプションに含む場合 distcc は無効になります。
CFLAGS="-march=pentium3 --param l1-cache-size=16 --param l1-cache-line-size=32 -mtune=generic -fomit-frame-pointer -O2"
CXXFLAGS="${CFLAGS}"

192.168.0.200 で emerge パッケージ名 などのコマンドを実行します。
$ emerge -eav system

192.168.0.100 でパケットを見ます。
$ tcpdump tcp port 3632 -n

以前 glibc のバージョンが違う場合で、かつ ppc が CPU を借りる側の場合に glibc が sunrpc に関するエラーでコンパイルできなかったので、バージョンを合わせるのはお勧めです。

gcc,glibcなどのパッケージの3つ目の番号が違う場合は、動きます。
xxx-3.4.5 => xxx-3.4.6

コンパイル以外の部分は早くなりません。
./configure
...
checking xxx

参考
http://d.hatena.ne.jp/tmatsuu/20090110/1231557035
http://www.gentoo.org/doc/ja/distcc.xml
http://www-auklet.gentoo.org/doc/ja/handbook/handbook-sparc.xml?part=2&chap=3

0 件のコメント: