dmucs与distcc
之前配置distcc没有考虑负载均衡这一项,现在考虑使用dmucs实现distcc的负载均衡
官方手册
使用官方手册编译会报错,等解决问题后再来总结
=================================================================================
update by 2013-11-08
使用apt安装dmucs
apt-get install dmucs
安装文件:
/.
/usr
/usr/bin
/usr/bin/gethost
/usr/bin/loadavg
/usr/bin/monitor
/usr/bin/remhost
/usr/bin/addhost
/usr/sbin
/usr/sbin/dmucs
/usr/sbin/loadavg
/usr/share
/usr/share/doc
/usr/share/doc/dmucs
/usr/share/doc/dmucs/copyright
/usr/share/doc/dmucs/changelog.Debian.gz
/etc
/etc/default
/etc/default/dmucs
/etc/init.d
/etc/init.d/dmucs
/etc/dmucs.conf
其中用的到的gethost, loadavg, dmucs , 配置文件/etc/default/dmucs && /etc/dmucs.conf
部署结构:
一台机器上启动dmucs进程(host-server),相当于整个体系的大脑,进行后续的任务分配,它可以安装在任意一台机器上,不参与实际的编译过程;
在参与distcc编译的机器上启动loadavg进程,向启动dmucs进程的机器发送本机负载情况;
将要编译的软件包放在安装了distcc和dmucs的某一台机器上,进行编译;
实际的配置:
前提,distcc能够正常运行,能进行分布式编译
dmucs (host-server)的配置:
- 修改/etc/default/dmucs文件,将SERVER=no改为SERVER=yes
- 修改/etc/dmucs.conf文件,其中添加实际参与编译的机器信息,具体格式为:
# Configuration file for dmucs server.
#
# Format: machine number-of-cpus power-indexInnerServer1 2 2
InnerServer2 4 3
InnerServer3 4 3其中第一列为主机地址(或者主机名),第二列为主机拥有的CPU核数(?),第三列为主机性能的权重,最差的机器赋值最小(大于等于1的某个整数),然后性能好的机器赋予更高的权值。
- 启动dmucs,可以以服务方式启动:/etc/init.d/dmucs start , 或者可以直接在命令行输入dumcs,如果在实际参与编译的机器上启动了loadavg,则会看到类似下面的输出:
root@InnerServer1:/home# dmucs
New host available: InnerServer3/4, tier 3, type
New host available: InnerServer1/2, tier 2, type
New host available: InnerServer2/4, tier 3, type
实际参与编译的机器的配置:
- 修改/etc/default/dmucs文件,将USE_SERVER=修改为USE_SERVER=<ip>,ip为(host-server)的地址;
- 启动distcc服务,启动loadavg进程,命令:loadavg -s <ip> -D & , 其中-s 后面指定使用的server,-D代表debug, & 代表后台运行
编译包所在服务器上的配置:
除了按照上面要启动distcc和loadavg,还要做如下配置:
- export DISTCC_HOSTS="<ip1> <ip2> <ip3>...",输出参与实际编译的服务器的地址(这属于distcc 的配置)
- export PATH=/usr/lib/distcc:$APTH,这一步的作用是使用distcc代替gcc,g++等等,因为使用apt-get安装的distcc默认生成目录/usr/lib/distcc,在该目录里面有包括cc/c++/g++/gcc等软链接文件,这些文件全部指向/usr/bin/distcc,也就是说,现在的编译环境全部由distcc提供,因为/usr/lib/distcc目录的文件最先被找到,这一句话可以放在.bashrc文件中,它的作用也等同于其他文档中所说的CC=“distcc gcc” CXX='distcc g++'这一句
- 在configure时执行CC='gethost -s <ip> distcc' CXX='gethost -s <ip> distcc' ./configure,这样在下面make的时候,会先到<ip>所指的server去查询各个机器的性能,然后由该dmucs server统一分配编译任务。注:在其他文档中都没有提到gethost -s <ip>,因为其他以源码包安装的dmucs在安装的时候指定了server,但我是用apt安装,所以在这儿被阻拦了一段时间。 其他文档有按照apt安装的,它所中给出的make -j8 CC=gethost distcc,这条命令肯定无法执行。
- make -j$(distcc -j),如果只用make的话,会看到只有单线程运行,违背了分布式编译的初衷
- 一些工具:distccmon-text 2,显示任务分配,2代表每隔2秒刷新一次,或者watch distccmon-text具有相同的作用。
一些参考:
http://www.ibm.com/developerworks/cn/aix/library/0905_yangyi_distcc/
http://blog.chinaunix.net/uid-28190171-id-3379699.html
dmucs与distcc的更多相关文章
- distcc加速内核编译
Linux内核编译实在是费时间的事,搞内核移植的时候总要编译,生命有一部分就浪费在等内核编译完成上,有心想买个HP的工作站,看了下Z840的价格,想想还是算了.distcc早就听说过,一直没有去试试, ...
- distcc (dcc_execvp) ERROR: failed to exec XX: Permission denied
首先先确保一下是不是能执行下面语句: # sudo -u nobody XX --version 如果能看见版本信息,则可以不用往下看. 再检查一下distccd.service # sudo cat ...
- (转)Android分布式编译学习(一)distcc实现分布式编译 —— Ubuntu12.04上部署distcc分布式编译
转自:http://blog.csdn.net/eqiang8271/article/details/17144411 版权声明:本文为博主原创文章,未经博主允许不得转载. Android代码庞大 ...
- distcc配置
原理图: OS: ubuntu Server 12.04 1.安装 apt-get install distcc 2.配置 将文件/etc/default/distcc修改为如下格式 STARTDIS ...
- cmake工程使用distcc
distcc可以加速编译,但是遇到cmake可能就需要处理下. 问题 distcc在 /usr/lib/distcc 中放了各编译器的soft link(如cc/gcc等等),如果 /usr/lib/ ...
- distcc 的使用
在项目的开发过程中,经常出现多个开发人员集中在某个 linux 内网开发机上统一开发的情况,随着开发人员越来越多.项目编译得越来越频繁,开发机的压力越来越大,所以考虑用代码交叉编译的方式来缓解开发机的 ...
- metasploit--exploit模块信息
Name Disclosure Date Rank Description ---- ...
- Jenkins+Gitlab搭建持续集成(CI)环境
利用Jenkins+Gitlab搭建持续集成(CI)环境 Permalink: 2013-09-08 22:04:00 by hyhx2008in intern tags: jenkins gitla ...
- ccache高速编译工具
ccache的主页:http://ccache.samba.org distcc的主页:http://distcc.samba.org 1.背景: 在处理一些规模相对较大的工程时,编译花费的时间可能会 ...
随机推荐
- centos6.5_x86_64安装Adobe Flash Player
对x86_64的CentOS6.5系统,安装FireFox的Adobe Flash Player插件 安装插件,终端下输入命令:#wget http://linuxdownload.adobe.com ...
- 打地鼠游戏ios源码
打地鼠游戏源码,游戏是一款多关卡基于cocos2d的iPad打地鼠游戏源码,这也是一款高质量的打地鼠游戏源码,可以拥有逐步上升的关卡的设置,大家可以在关卡时设置一些商业化的模式来盈利的,非常完美的一款 ...
- url中文参数解决方案
首先,弄清楚为什么url传递中文会转码或者乱码,以及http头 contentType="text/html; charset=GBK" 的作用. html代码会经过web服务器, ...
- sqlite:多线程操作数据库“database is locked”解决方法(二)
上一篇博客<sqlite:多线程操作数据库“database is locked”解决方法>通过注册延时函数的方法来处理数据库被锁的问题.此方法固然能解决问题,但是在多个线程向数据库写入大 ...
- c/c++基本问题
1. 使用g++将文件编译成库文件 g++ -c -O2 -fPIC test.cpp -o test.o && g++ -shared -Wall -o test.so test.o ...
- POJ C++程序设计 编程题#1 编程作业—继承与派生
编程题#1 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 写一个MyStr ...
- 大数据实践:ODI 和 Twitter (一)
本文利用twitter做为数据源,介绍使用Oracle大数据平台及Oralce Data Integrator工具,完成从twitter抽取数据,在hadoop平台上处理数据,并最终加载到oracle ...
- Java ZK image 處理
自己上 ZK 官方論壇提問.別人的回答.自己解決問題後上傳的問題紀錄: http://forum.zkoss.org/question/101152/how-do-i-binding-image-fi ...
- PHP代码优化的53个细节
PHP代码优化的53个细节,常见而重要的php优化策略. 用单引号代替双引号来包含字符串,这样做会更快一些.因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会,注意:只有echo能这么做,它是一 ...
- js闭包理解实例小结
Js闭包 闭包前要了解的知识 1. 函数作用域 (1).Js语言特殊之处在于函数内部可以直接读取全局变量 <script type="text/javascript"> ...