distcc源码研究二

作者:朱金灿

来源:http://blog.csdn.net/clever101

 

       继续研究distcc源码。为了便于研究distcc,需要学习一些分布式编译原理以及distcc的简单用法。

 

      分布式编译的原理很简单, 就是将编译的整个工作量通过分布计算的方法分配到多个计算机上执行, 这样可以获得极大的效率提升. 由于分布式计算的技术相对成熟, 现在可以见到的分布式编译软件也较多. 一般来说, 一个分布式编译软件不是一个编译器, 而是附着在某个编译器上的分布计算管理软件, 使得对于特定的编译器可以实现分布式编译。

 

     IncrediBuild想必大家都经常使用吧?IncrediBuild需要一个特定的计算机做仲裁者, 其他的所有计算机作为客户, 有了仲裁者的好处是, 可以有它来统一安排所有客户端所发起的编译请求, 一旦某个客户发起编译请求, 则仲裁者会根据其他客户的CPU空闲情况而安排分布式编译, 当多个客户同时发起编译请求时, 仲裁者会自动平衡分布计算负担,使得编译参与者不会占用过多的CPU。distcc和IncrediBuild的差别在与distcc不使用仲裁者, 直接由客户端对其他客户端发起编译请求. 所以每个客户端都需要知道其他客户端的位置, 并且当多个客户发起编译请求时不易做平衡处理。

 

    下面是关于distcc快速安装和配置的说明:

 

    下载 distcc(请参阅 参考资料 部分)。

    通过执行 ./configure; make &&make install 在所有机器上编译distcc 源。

    编译过程先在某台机器上开始,然后分布所有其他机器(服务器)。在所有服务器中,启动 distccd 守护程序(您必须具有执行操作的根特权)。distccd 位于 /etc/init.d 文件夹。在根模式下启动 distccd 的语法是

 

   tcsh-arpan# /etc/init.d/distccd start

 

    在用户模式下启动它的语法是

 

   tcsh-arpan$ sudo /etc/init.d/distccd

 

还可以通过运行 distccd –daemon –j N 在用户模式下运行distcc 守护进程,其中 N 是您要在给定机器上运行的作业数。

 

    本地机器需要知道应该将编译过程分布到哪些服务器。根据您的 shell,发出与下面命令相似的命令:

 

   export DISTCC_HOSTS='localhost tintin asterix pogo'

 

 

   tintin、asterix 和 pogo 是网络中可以驻留编译过程的其他主机;localhost 是本地计算机。

    也可以不使用导出指令。您可以创建一个名为 hosts 的文件,将服务器的名称放在该文件中,各个名称使用空格分隔。将该文件复制到$HOME/.distcc 文件夹。

 

distcc 的工作原理

distcc 将预处理代码发送给网络中的其他指定机器。distccd 守护进程确保编译在远程机器上发生。distcc 的设计目的是与 GNU make 的并行编译(-j)选项一起使用。distcc本身不是一个编译器;它只是用作 g++ 的一个前端。几乎 g++ 的所有选项都可以按原样传递给 distcc。

 

安装 distcc 之后,惟一需要做的就是触发编译。下面是调用方法:

 

make –j4 CC=distcc –f makefile.x86_linux

 

   以上的信息来自我的搜索。这里稍微解释下,linux的守护进程大致相当于windows下的服务进程。看到这里我产生一个疑问是:看样子distccd 守护程序大致相当于分布式编译工具中的服务器端,那么它起的作用是什么?我猜测它应该起一个捕捉消息、传递消息和远程调用的作用,具体是:

 

                        

    

 

    这个猜测还有待验证。开始还不知道服务器端程序的入口函数在哪里,找了一下,服务器端(即distccd 守护进程)的main函数在daemon.c。

 

参考文献:

1. incredibuild工具

2. 分布式编译

3. Distcc手册页





转载于:https://www.cnblogs.com/lanzhi/archive/2012/01/14/6470902.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值