Scons在大型代码库

时间:2016-11-08 12:05:08

标签: java c++ build scons

我们几年来一直在用scons作为构建系统来开展我们的项目。 Scons非常棒,并且很好地改进了我们的开发过程。 最初有大约15000个C ++源文件,随着项目的发展,其他语言(Java / Scala)中的源文件也被添加到代码库中。 然后我们开发了自己的构建器来管理依赖项并调用外部工具(javac,scalac)来构建这些源,这非常有效。 最近我正在研究当前构建系统的优化,并发现C ++和Java构建过程之间的性能差异:

环境设置 构建具有24核的服务器,Python 2.7.3,Scons 2.2.0
命令: scons --duplicate = soft-copy -j8

在构建java代码时,从顶层和跨越多个核心很容易观察到CPU使用率: Java Build

但是,在构建C ++代码时,无论scons 中有多少个工作,CPU使用率始终为~4%且仅在1核 上运行: C++ Build

我一直在互联网上搜索,但找不到有用的东西。我在Python中遇到GIL问题了吗?我相信每个gcc / g ++命令应该在一个单独的子进程中运行,就像我们自己的构建器中的javac一样,所以这里不应该有GIL。是否有任何解决方法可以充分利用多个核心来进一步加速C ++构建? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

正如WindLeeWT在其中一条评论中所解释的那样,观察到的行为的原因是在相关服务器上安装并配置了ccache。似乎C ++构建期间的大部分CPU使用都是在编译阶段完成的,由于ccache而完全避免了。这就是为什么在top内没有看到几个核心的CPU使用情况。

一旦他们在没有ccache的另一台服务器上启动了“从头开始构建”,就会有几个内核以'cc1plus -o ...'的90%运行。

没有涉及性能损失(GIL等),Python和SCons都没有以任何显着的方式降低性能。