我正在努力改进一些项目的构建。我已经显著地改进了构建时间,现在我认为瓶颈更加微妙。
构建使用GNU样式的makefile。我生成一系列依赖文件(.d
)并将它们包含在makefile中,否则就没有什么特别的事情发生了(例如,没有预编译头文件或其他缓存机制)。
在32核sparc ultra上,构建耗时约95秒,并行运行16个线程。当构建运行时,空闲时间徘徊在80%左右,内核时间徘徊在8-10%之间。我将代码放在/tmp中,但大多数编译器支持文件都是挂载的,我认为这可能会造成性能瓶颈。
有什么工具可以测量和跟踪这些类型的问题?
发布于 2011-09-09 21:22:41
根据我自己的经验,编译C/C++代码需要通过C预处理器读取大量的头文件。我曾经经历过这样的情况:生成一个完整的翻译单元需要超过50%的g++运行时间。
正如您所提到的,编译时它有80%处于空闲状态,那么它一定是在等待I/O。iostat
和DTrace将是一个很好的起点。
https://stackoverflow.com/questions/7355753
复制相似问题