我正在努力改进一些项目的构建。我已经非常显着地改进了构建时间,而且我现在处于一个我认为瓶颈更微妙的地步。
构建使用GNU样式的makefile。我生成了一系列依赖文件(.d
)并将它们包含在makefile中,否则没有任何花哨的东西(例如,没有预编译的头文件或其他缓存机制)。
在32核sparc ultra上构建大约需要95秒,并行运行16个线程。在构建运行时,空闲时间徘徊在80%左右,内核时间徘徊在8-10%之间。我把代码放在/ tmp中,但大多数编译器支持文件是NFS挂载的,我相信这可能会造成性能瓶颈。
有哪些工具可用于测量和测量追查这些问题?
答案 0 :(得分:1)
根据我自己的经验,编译C / C ++代码需要通过C预处理器读取大量头文件。我遇到过g ++运行时间超过50%来生成完整翻译单元的情况。
正如你所说,它在编译时闲置80%,它必须等待I / O. iostat
和DTrace将是一个很好的起点。