并行make

我在为 SUSE 12环境编译glusterfs 11在SuSE 12 SP5中升级gcc ,发现一个麻烦的事情,编译 GCC 实在太耗时了。同事提醒可以修改configure参数,增加多核并行。

我想起来当时编译时确实发现只有一个 cc1plus 进程运行,完全浪费了多cpu core的高性能服务器资源。当时因为只处理一台编译,也就没有再尝试优化。

没有启用 -j XX 参数 升级CentOS 7 GCC 耗时:

没有启用 -j XX 参数之前编译gcc 耗时
real    283m7.795s
user    270m45.706s
sys     11m37.685s

由于服务器有128个cpu core( Hygon C86 7291 32-core Processor AMD Zen微架构 ),所以执行以下命令配置 make 并行度 96 (保留了部分cpu core):

alias make="/usr/bin/make -j 96"

使用 -j 96 :

使用96个并发任务执行make可以大大加速编译gcc速度(30分钟哦)
real    30m0.101s
user    351m19.893s
sys     11m25.813s

备注

使用 -j 参数并发在多处理器服务器上运行编译,可以看到 real 时间远小于 systemuser 累加的时间。这是因为 systemuser 消耗时间是在多个处理器上累加起来的,多个并发实际完成时间大大缩短 ( real 时间 )。详见 time

异常排查

我在生产环境启用了并行make,遇到一个困难 并行make触发OOM排查

参考