如何在编译/链接循环期间测量在磁盘I / O上花费的时间?

时间:2013-12-16 03:52:18

标签: c++ linux compiler-construction

在Linux系统上,有没有办法测量g ++编译/链接循环期间在磁盘I / O上花费的时间?

我感兴趣的是在花费在SSD上以改善构建时间之前测量此指标。

2 个答案:

答案 0 :(得分:2)

您可以使用ccache。

它是C / C ++,Objective-C和Objective-C ++的缓存。

它将大大改进已编译源的编译。这意味着编译器花费大量时间来执行代码而不是等待IO(至少对于C ++)。

如果您需要经常清理来源,这是必须的。

在没有ccache的情况下编译我的项目: 7分46秒

用它: 24秒

答案 1 :(得分:0)

放大@ MarkGarcia的评论:在i / o期间隔离等待时间是很困难的。 Linux会提前读取磁盘缓冲并进行其他优化,这将阻碍获得稳定的时序。

获得准确的i / o时间的努力可能会影响测量。也许你可以改变gcc来添加仪器代码,或者把gcc放在一个仿真盒里面,这个仿真盒可以用来代替i / o,或者其他东西可能也很重要。

但你真正想知道的是等待磁盘会影响整个编译时间。

简单方法1:连续两次运行编译并测量执行时间 - 可能使用times命令。第一次将从磁盘读取文件。第二次很可能使用文件的内存缓存副本,除非文件非常大或者系统忙于处理其他内存密集型任务(这会导致文件缓存很快清除)。

不是那么简单的方法2:将所有需要的文件加载到ram磁盘 - 你的构建树加上/usr/include的所有内容和/usr/lib所需的位 - 并改变构建以使用这些文件代替。这样做会让你感到恼火。