distcc 部署

简介

distcc 是一个分布式 C/C++ 编译系统,它通过将编译任务分发到多台机器上来加速编译过程。它允许你利用多台计算机的计算能力,更快速地编译代码,特别适用于大型代码库或资源受限的设备环境。

部署教程

服务端

对于 Debian 系统,可以直接使用包管理器安装 distcc

sudo apt install distcc

开启 distcc 服务

distccd --daemon --allow 192.168.0.0/24  # 允许特定 IP 范围的机器访问

客户端

sudo apt install distcc distcc-pump

配置 DISTCC_HOSTS 环境变量,指定可用的工作节点。可以在 .bashrc 中添加以下内容:

export DISTCC_POTENTIAL_HOSTS='localhost 192.168.0.240 192.168.0.243 192.168.0.245 192.168.0.246'

然后,可以尝试编译一个简单的程序,检查 distcc 是否正常分发编译任务:

distcc-pump distcc -o test test.c
sipeed@lpi3h-a2d1:~/distcc$ distcc-pump distcc -o test test.c
__________Using distcc-pump from /usr/bin
__________Found 4 available distcc servers
__________Shutting down distcc-pump include server

编译测试

为了测试 distcc 是否能够有效地加速编译过程,我们使用 OpenSSL 来进行编译测试。OpenSSL 是一个广泛使用的 C 库,包含大量源代码,适合用来测试分布式编译的效果。

git clone https://github.com/openssl/openssl.git
cd openssl
./config
distcc-pump make -j20 CC=distcc

可以使用 distccmon-text 查看当前编译任务的分发情况

sipeed@lpi3h-2193:~$ distccmon-text 
 67535  Compile     cmp_ctx.c                                 192.168.0.240[0]
 67528  Compile     cmp_asn.c                                 192.168.0.240[1]
 67635  Compile     cms_dh.c                                  192.168.0.240[2]
 67569  Compile     cmp_http.c                                192.168.0.243[0]
 67696  Compile     cms_io.c                                  192.168.0.245[0]
 67583  Compile     cmp_server.c                              192.168.0.245[1]
 67561  Compile     cmp_hdr.c                                 192.168.0.245[2]
 67606  Compile     cmp_vfy.c                                 192.168.0.245[3]
 67657  Compile     cms_enc.c                                 192.168.0.246[1]
 67672  Compile     cms_env.c                                 192.168.0.246[2]

编译性能对比

在测试过程中,我们对 OpenSSL 项目分别使用了单机编译和分布式编译(5台机器),下面是两种方式的编译结果:

单机编译(不使用 distcc)
real    18m11.760s
user    64m37.024s
sys     5m56.326s
分布式编译(使用 distcc)
real    6m32.262s
user    18m39.468s
sys     4m30.008s

可以看到,使用 distcc 进行分布式编译后,编译时间显著缩短,从 18 分钟降至约 6 分钟。可见分布式编译的加速效果明显,同时也可以有效地减轻单个机器的负载。