在Linux系统上,有没有办法测量g ++编译/链接循环期间在磁盘I / O上花费的时间?
我感兴趣的是在花费在SSD上以改善构建时间之前测量此指标。
答案 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
所需的位 - 并改变构建以使用这些文件代替。这样做会让你感到恼火。