Optimization 测量构建时间以识别瓶颈

Optimization 测量构建时间以识别瓶颈,optimization,makefile,build-process,Optimization,Makefile,Build Process,我正在为一些项目改进构建。我极大地提高了构建时间,现在我认为瓶颈更加微妙 构建使用GNU样式的makefile。我生成了一系列依赖项文件(.d),并将它们包含在makefile中,否则就不会发生什么奇怪的事情(例如,没有预编译的头或其他缓存机制) 在32核sparc ultra上构建大约需要95秒,并行运行16个线程。构建运行时,空闲时间徘徊在80%左右,内核时间徘徊在8-10%之间。我将代码放在/tmp中,但大多数编译器支持文件都是NFS挂载的,我相信这可能会造成性能瓶颈 有什么工具可以测量和

我正在为一些项目改进构建。我极大地提高了构建时间,现在我认为瓶颈更加微妙

构建使用GNU样式的makefile。我生成了一系列依赖项文件(
.d
),并将它们包含在makefile中,否则就不会发生什么奇怪的事情(例如,没有预编译的头或其他缓存机制)

在32核sparc ultra上构建大约需要95秒,并行运行16个线程。构建运行时,空闲时间徘徊在80%左右,内核时间徘徊在8-10%之间。我将代码放在/tmp中,但大多数编译器支持文件都是NFS挂载的,我相信这可能会造成性能瓶颈


有什么工具可以测量和跟踪这类问题?

根据我自己的经验,编译C/C++代码需要C预处理器读取大量头文件。我曾经经历过这样的情况:生成一个完整的翻译单元需要超过50%的g++运行时间


正如您提到的,编译时它会空闲80%,因此它必须等待I/O
iostat
和DTrace将是一个很好的起点。

您不使用预编译头的原因是什么?根据我的经验,这些可以大大加快整个过程。对我来说,链接本身大约需要2分钟。完整编译可能需要超过5分钟。当我进行完整优化构建时,所有模块都合并到一个模块中,以实现完整的IPO。对于不同的体系结构,我通常会同时运行5-10个构建。(这是自模块合并以来唯一一个得到多核编译的。)@Voo-它在备忘录上,我只是还没有走这条路。