ubuntu 14.04分布式编译

1.Distcc介绍

distcc是一个非常快且免费的分布式C/C++编译工具,distcc分为四个部分:


distcc:distcc是一个类似客户端的程序,不过它的角色是个编译器,可以让C/C++代码在很多网络服务器上进行分布式的编译,就像本地编译一样,当然比本地编译快很多。

distccd:distccd是一个守护进程,每个网络服务器上都需要安装这个守护进程,用来处理distcc发送过来的各种计算资源。

distccmon-gnome:distccmon-gnome是一个图形界面的监控程序,可以实时显示在分布式编译中各cpu使用情况。

distccmon-text:distccmon-text是一个监控程序,用来监控编译的分布情况以及网络服务器编译使用情况。

 

2.Distcc的安装与配置

2.1.安装

方法一:直接在命令行安装

~$ 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

 

2.2.配置

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

 

3.distcc的使用及测试

3.1.使用distcc

源码包编译:

使用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”


3.2.测试分布式是编译

方法一:运行:distccmon-text 2 //可查看每台机器的编译状况 ,为文本模式,数字2是表示每2秒刷新一次也可以改变1或是别的数字。

实例:运行distccmon-text 2,开始编译某个工程,监控分布式编译:

 ubuntu 14.04分布式编译

方法二:运行distccmon-gnome: 是一个图形化的监控前端,下图是此程序的一个运行实例。其中,任务进度指示条颜色的意义分别为:绿色:compiling;紫色:preprocessing;蓝色:receiving;橙色:connecting;白色:idle;

安装:sudo apt-get install distccmon-gnome

运行:distccmon-gnome

distccmon-gnome: 监控前端:

ubuntu 14.04分布式编译


4.备注

使用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


你可能感兴趣的:(ubuntu 14.04分布式编译)