distcc+ccache+dmucs构建分布式编译环境

PS: distcc3.1+之后的pump模式足可以取代dmucs,因此,此文几乎没有什么作用,看看就好 ^_^(20170322)

因公司内部服务器环境发生变化,需进行迁移工作,重新配置开发编译环境。发觉了distcc+ccache这个分布式编译的东东,研究了一阵子,并参考网上资料,加入了dmucs,使得整体编译效率会有所提高,以下为例子演示:
参考链接:

 

Distcc的工作原理为:
GCC 编译C/C++构建一个execualble分为四个阶段:
1,cpp(C预处理器):.c 到.i,  由cc完成汇编
2,ccl(C编译器):.i到.s ,由cc完成  由cc完成编译
3,as(汇编器):.s到.o,由as完成
4,链接:.o 到可执行文件,由collect2完成
其中第三阶段是效率瓶颈
因此,distcc此时作为编译器驱动器,负责把gcc -c预处理输出分布到指定的服务器进行处理,
对应的服务器的distccd进程接收到任务,交给本地的distcc进而编译,最终把.o文件返回给客户端
客户端再链接成可执行文件,完成编译过程

Ccache(cache compiler)作用:
ccache(“compiler cache”的缩写)工具会高速缓存编译生成的信息,并在编译的特定部分使用高速缓存的信息,
比如头文件,这样就节省了通常使用 cpp 解析这些信息所需要的时间。如果您编译清单 2 中的文件,
假定 foobar.h 中包含对其他头文件的引用,ccache 会用那个文件的 cpp-parsed 版本来 取代 include 声明。
就那么简单。不是真正去读取、理解并解释其内容,ccache 只是将最终的文本拷贝到文件中,使得它可以立即被编译。

DMUCS(Distributed Multi-User Compilation System):
用于distcc的负载均衡算法过于简单,越靠前的主机得到的任务越多,导致其它机器的工作效率低下
因此,使用DMUCS实现动态平衡和任务分布

开发机: 192.168.122.100
调度器: 192.168.122.101
服务端: 192.168.122.102 192.168.122.103 192.168.122.104

linux系统: Centos6.8 x86_64
软件版本:
distcc-server-3.2rc1-2.el6.x86_64
distcc-3.2rc1-2.el6.x86_64
ccache-3.1.6-2.el6.x86_64
dmucs-0.6.1-2.1.tar.gz

1,开发机部署
ps: 安装distcc-server是因为开发机自身也可以加入编译服务器队列

 

下载dmucs源码,编译安装,这个源码是我从debian85上面apt-get得来,dmucs_0.6.1-2.1
因为参考文章中的https://sourceforge.net/projects/dmucs/files/dmucs/dmucs%200.6.1/这个版本存在64位系统兼容bug

ps: 安装dmucs目的是为了得到gethost组件,用来和调度器通信

 

配置distcc和ccache
参数说明, distcc3.1+版本加入pump模式,改善之前的算法,强制所有主机都随机化加入工作队列
启用方法: --randomize xxx,cpp,lzo
make的时候用pump make -j8即可启动distcc-pump

 

2,调度器部署
编译安装dmucs即可,省略

配置dmucs,编写主机列表,默认配置文件在/usr/local/etc/dmucs.conf

启动调度器

 

3,服务端distccd部署

 

编译安装dmucs,是为了得到loadavg组件,与调度器传递机器负载信息,省略

配置distccd

ps: 此时通过ps aux  | grep distccd是发现没有进程,是因为启动脚本读取的配置文件为/etc/sysconfig/distccd
因此, 手动启动 distccd --daemon --user nobody --allow 192.168.0.0/16
更多用法解析可以distccd --help

同样配置另外的2台机器

Finally,test!!
去到开发机,找个php源码来编译试试,使用distccmon-text观察效果,附带编译例子,-j18是由所有主机的CPU核心数总和*1.5得来

 

提醒
Learn
游客
Learn

centos下源码编译安装github上最新版本0.6.1编译失败怎么解决呀。。

90hmaster
管理员
90hmaster

0.0

90hmaster
管理员
90hmaster

啥报错

CianCHEN
游客
CianCHEN

老司机求带 ^ — ^
| _&_ | : )