distcc是一个非常快且免费的分布式C/C++编译工具,distcc分为四个部分:
distcc:distcc是一个类似客户端的程序,不过它的角色是个编译器,可以让C/C++代码在很多网络服务器上进行分布式的编译,就像本地编译一样,当然比本地编译快很多。
distccd:distccd是一个守护进程,每个网络服务器上都需要安装这个守护进程,用来处理distcc发送过来的各种计算资源。
distccmon-gnome:distccmon-gnome是一个图形界面的监控程序,可以实时显示在分布式编译中各cpu使用情况。
distccmon-text:distccmon-text是一个监控程序,用来监控编译的分布情况以及网络服务器编译使用情况。
方法一:直接在命令行安装
~$ sudo apt-get install distcc dmucs
方法二: 下载distc,解压,编译安装如下:
~$ wgethttp://distcc.samba.org/ftp/distcc/distcc-2.18.3.tar.bz2
~$ tar-jxf distcc-2.18.3.tar.bz2
~$ cddistcc-2.18.3
~$./configure && make && sudo make install
1)安装完后可通过/etc/default/distcc进行配置,有如下配置项:
STARTDISTCC="true" ;设distcc是否开机启动。
ALLOWEDNETS="127.0.0.1 192.168.10.0/24" ;可允许访问的网络用空格分割开来 其中10.2.3.0/24是使用CIDR记名法来指明网段。
LISTENNER="";Distccd本地监听的IP地址。经验证这里必须设置为空,否则其他机器来连接是会被拒绝。
ZEROCONF="true"是否使用zeroconf通过mDNS/DNS-SD用于发现distcc而不用手动配置主机,建议开启。
2)为了添加distcc主机列表, 可通过修改/etc/distcc/hosts 增加主机,只需在+zeroconf下一行添加想要添加的IP地址,每个IP地址用空格隔开,如下:
+zeroconf
192.168.10.113 192.168.10.116
备注:如果如果主机列表不手动指定的话,则ALLOWEDNETS设置的网段内可用的机器都可作为该主机的分布式编译辅助机,此处建议不指定主机。
3)重启distcc服务:/etc/init.d/distcc restart
源码包编译:
使用distcc最根本的是在编译器前面加上关键是distcc,例如:distcc gcc main.c。
对于大工程可在Makefile中设置类似CC=distcc gcc。
make -j4 //数字4是分配的任务个数,具体可根据你的机器的CPU核心总个数加1,或是乘以2或3也可以
-j:指定可以在本节点上运行的最大任务数。
编译:sudo make -j20 CC=distcc
注:编译流程中的链接最好不要使用distcc。
交叉编译:
make -j4CC=”distcc mipsel-linux-gcc”
方法一:运行:distccmon-text 2 //可查看每台机器的编译状况 ,为文本模式,数字2是表示每2秒刷新一次也可以改变1或是别的数字。
实例:运行distccmon-text 2,开始编译某个工程,监控分布式编译:
方法二:运行distccmon-gnome: 是一个图形化的监控前端,下图是此程序的一个运行实例。其中,任务进度指示条颜色的意义分别为:绿色:compiling;紫色:preprocessing;蓝色:receiving;橙色:connecting;白色:idle;
安装:sudo apt-get install distccmon-gnome
运行:distccmon-gnome
distccmon-gnome: 监控前端:
使用distcc时的缺点在于其负载均衡算法过于简单,distcc 的代理进程对各个工作机当前的负荷没有感知,分发预处理文件的唯一依据是主机出现在 DISTCC_HOST 环境变量中的次序,主机名越靠前,就会得到更多的编译任务,然而当编译场中某些机器性能过差,整体编译性能会显著下降,当阻塞 Make 运行的编译任务运行在这些机器上的时候,这种性能变化尤为明显。
一个有效的方案是使用 DMUCS(DistributedMulti-User Compilation System)应用。DMUCS 是一个实现于 distcc 之上的动态平衡和任务分布程序。
但是由于每增加一台机器都要配置相关文件,运用起来变得比较麻烦。如果几台机器的性能差不多,只要装了distcc,系统启动后会自动在后台启动distcc的守护进程。在多次调试编译时可直接用分布式编译,而不需要再做任何配置。在此对DMUCS的相关安装及配置不做介绍。
5.参考文档
[1] http://bbs.shendu.com/thread-1801348-1-1.html
[2] http://blog.chinaunix.net/uid-25299072-id-2984342.html