框架介绍
yadcc是广泛投产于腾讯广告后台的C++分布式编译系统。
我们在调研学习了业界的ccache、sccache、distcc、icecc等开源的编译加速系统之后,根据我们实际的工业生产场景,设计了这样一套系统。
目前我们实际生产环境:
- 有~1700编译核心;
- 使用512并发编译(实际并发度取决于本地预处理能力,32逻辑核以上可达到512并发);
- 每天编译产出(含命中分布式缓存)300,0000+个目标文件;
- 每天编译产出总计约3~5TB。
本着回馈社区的目的,我们现将这套分布式编译系统对外开源。
基本原理
与ccache、sccache、distcc、icecc等类似,可通过创建名为g++等的符号链接至yadcc的客户端,并将之加入PATH,来截获编译器调用。之后yadcc的客户端会将任务分发出去至编译机编译,降低本地负载。
也因此,通常而言,使用分布式编译可以加大本地并发度(因为单个任务很多时候是在休眠等待网络上的编译结果返回),实现更高的编译吞吐。例如8逻辑核的机器通常可以通过make -j100来加速编译。
需要注意的是,分布式编译通常只能提高吞吐,但是不能降低单个文件的编译耗时(暂不考虑命中缓存的情况)。对于无法并发编译的工程,除非命中缓存,否则分布式编译通常不能加快编译,反而可能有负面效果。
主要特点
我们首先分