使用 icecream 進行分佈式編譯

icecream 是一個分佈式編譯工具, 它的實現思想是一臺主控制機加上若干臺工作站,主控機把編譯任務分配給工作站,主控機會根據工作站CPU的空閒情況進行分配,這樣比較合理。 而且,主控機和工作站會自己進行網絡通訊,從而知道網絡內有多少臺機器願意分佈式編譯,用戶不用像distcc那樣,指定工作站的名字,這點我覺得比較方便。 

下載並編譯icecream


下載並解壓到一個臨時目錄,運行
./configure --prefix=/opt/icecream
make
su - root
make install
安裝在 /opt/icecream 目錄裏


配置

su - root
在每臺機器上都要起icecc 守護進程:
/opt/icecream/sbin/iceccd -d -v
在主控機上起 icc scheduler: 
/opt/icecream/sbin/icecc-scheduler -d -v


在用戶的.bashrc 里加上路徑:
export PATH=/opt/icecream/libexec/icecc/bin:$PATH
/opt/icecream/libexec/icecc/bin 放的是名爲gcc, g++的可執行文件,也就是
說它們要優先於系統原來默認的gcc。 


如果要做native 編譯,用命令
/opt/icecream/bin/icecc --build-native
它會生成一個打包文件,包含了編譯器需要用到的所有文件。 在進行分佈式編
譯的時候,這些文件會傳到編譯主機上,並創建一個chroot環境。我覺得這是優於distcc的地方:不需要把編譯器安裝到另一臺機器上。

export ICECC_VERSION=/home/yuwen/src/binutils-2.15/117d324a46e532af061421c3d940b082.tar.gz

export ICECC_DEBUG=debug 
該命令讓icecc 輸出調試信息


編譯

然後就可以編譯了,必須加上-j選項
make -j6
觀察輸出, 如果看到類似這樣的log,說明分佈式編譯生效了:
<example>
ICECC[22334] 10:40:30: connected to /var/run/icecc/iceccd.socket
ICECC[22333] 10:40:30: Have to use host 172.25.52.190:10245 - Job ID: 1351 - env: i686 - has env: true - match j: 0
ICECC[22334] 10:40:30: env: i686 '/home/yuwen/src/binutils-2.15/6bc0f8d2aeca36e35947bdd88dd61f53.tar.gz'
ICECC[22334] 10:40:30: ./hex.c compiled 1 times on i686
ICECC[22333] 10:40:30: connected to 172.25.52.190
</example>


注意: native 編譯並不能總是生效,比如一臺x86 64位機是icc scheduler,另
一臺是x86 32位機是工作機, 64位上的編譯器並不能傳到32機上。 但反過來是
可以的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章