June 2010 Archives

distcc 介绍

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节省了很多的编译时间,对于编译时间长的大工程来说,是一个不错的选择。

一致性哈希简单介绍

  •  Consistent Hashing 算法早在 1997 年就在论文《Consistent hashing and random trees》中被提出,提出了在动态变化的Cache环境中,哈希算法应该满足的4个适应条件:
  1. 平衡性(Balance)
  2. 单调性(Monotonicity)
  3. 分散性(Spread)
  4. 负载(Load)

如何去除rpm的公钥

一不小心导入了同名称但是不同内容的公钥,然后在再次导入正确的公钥的时候,发现已经导入不了,提示内容如下:
[cnangel@localhost cnangel]$sudo rpm --import RPM-GPG-KEY-cnangel
error: RPM-GPG-KEY-cnangel: import failed.
而查看rpm的选项没有delete相关操作;重新import并使用--force选项,则提示:
rpm: only installation, upgrading, rmsource and rmspec may be forced
查看路径/etc/pki/rpm-gpg/下面也没有刚才错误的导入公钥文件,该如何删除错误的公钥而导入正确的公钥呢?
经过查看rpm和gpg相关文档,可以用如下方案解决:
[cnangel@localhost ~]$rpm -q gpg-pubkey
gpg-pubkey-57bbccba-4a6f97af
gpg-pubkey-16ca1a56-4a100959
gpg-pubkey-a3a882c1-4a1009ef
原来,经过查询获得gpg-pubkey的公钥就是这些结果,不过无法显示是哪个文件导入的,不过还是有版本,这个查询接口的排序是时间先后顺序,所以可以推算刚才导入错误的文件是第几个,然后删除即可:
[cnangel@localhost ~]$sudo rpm -e --allmatches gpg-pubkey-16ca1a56-4a100959
接着,可以导入正确的公钥了 :)

Monthly Archives

Pages

Powered by Movable Type 7.7.2

About this Archive

This page is an archive of entries from June 2010 listed from newest to oldest.

May 2010 is the previous archive.

July 2010 is the next archive.

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