distcc 介绍

| No Comments

Distcc 介绍

  • distcc是一个非常快且免费的分布式C/C++编译工具,distcc分为两个部分:
    1. distcc:distcc是一个类似客户端的程序,不过它的角色是个编译器,可以让C/C++代码在很多网络服务器上进行分布式的编译,就像本地编译一 样,当然比本地编译快很多。
    2. distccd:distccd是一个守护进程,每个网络服务器上都需要安装这个守护进程,用来处理distcc发送过来的各种计算资源。
    3. distccmon-text:distccmon-text是一个监控程序,用来监控编译的分布情况以及网络服务器编译使用情况。
  • 安装了distcc后,所有的网络服务器不需要挂载同样一份文件系统,不需要服务器时间同步,也不要求同样的库文件或者头文件,甚至服务器之间可以允许不 同的处理器和操作系统。

Distcc 简单架构

distcc.png

Distcc 安装

  • 在每台空闲的网络服务器上,下载distcc(目前到写完这篇文章为止,distcc最新版本为2.18.3),解压,编译安装如下:
  ~$ wget http://distcc.samba.org/ftp/distcc/distcc-2.18.3.tar.bz2
~$ tar -jxf distcc-2.18.3.tar.bz2
~$ cd distcc-2.18.3
~$ ./configure && make && sudo make install
  • 在上面安装的distcc服务器上,启动distcc的daemon进程,还可以通过--allow选项指定网关的访问权限。
  ~$ sudo /usr/bin/distccd --daemon --allow 10.0.0.0/8 --user cnangel
  • 环境变量设置,在所有的安装distcc的服务器上,执行:
  ~$ export DISTCC_HOSTS='10.20.137.1 10.20.137.2 10.20.137.3'

当然,为了保持变量值,可以将上述语句放入到$HOME/.bash_profile当中,另外,可以根据自己爱好不同,指定如下变量:

  ~$ export CC=distcc
~$ export CXX="distcc g++"
~$ alias make="make -j 4" (一般最好为服务器数的1.5倍最佳)
  • 最后,可以尝试编译自己的工程了。
  ~$ cd ~/works/myproject; ./configure ; make

是不是比平常快了很多呢! :)

小结

  • 具官方统计,在内核Linux2.4.19,单台CPU 1700MHz Pentium IV的机器使用distcc(v0.15)花费了6分45秒,而使用distcc在三台机器上(100Mbps)交叉编译,时间花费2分钟30秒,大概快 2.6倍左右 :)。
  • 一般来说,使用distcc节省了很多的编译时间,对于编译时间长的大工程来说,是一个不错的选择。

Leave a comment

Archives

Pages

Powered by Movable Type 5.2.2

December 2012

Sun Mon Tue Wed Thu Fri Sat
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          

Recent Assets

  • dish_st4.png
  • dish_m5.png
  • dish_3.png
  • dish_two.png
  • dish_6.png
  • dish_1.png.png
  • 照片1028 105.jpg
  • 照片1028 088.jpg
  • 照片1028 084.jpg
  • 照片1028 081.jpg
Creative Commons License
This blog is licensed under a Creative Commons License.

About this Entry

This page contains a single entry by Cnangel published on June 24, 2010 9:33 PM.

一种特殊的一致性哈希算法的研究 was the previous entry in this blog.

关于build系统 is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.