如何在GCC编译期间解决大量的IOWait延迟问题?

时间:2012-01-14 04:23:37

标签: gcc compilation

(不知道这是否严格依据主题,但我没有看到任何更好的Stack Exchange网站。)

我的Linux开发机器的内存有限(可以这么说 - 2.5GB对我来说似乎没什么限制)。我第一次尝试编译我的中小型项目的任何部分时,在实际进行任何编译之前,我得到了IOWait延迟的三到五分钟(是的,分钟)。一旦完成阅读它正在阅读的内容,编译本身只需几秒钟。

如果就是这样,我只是笑着忍受它,但如果我在编译之间基本上任何 - 甚至只是切换到Firefox窗口进行几分钟的研究 - 我再次得到同样的延迟。通过如此长时间的大拇指讨论,很难保持专注。

系统使用超过1 GB的磁盘缓存。我精心设计的预编译头文件只有200MB多 - 大,但不足以溢出缓存。什么是海湾合作委员会正在寻找那么长时间?或者,我怎么才能找到? GCC有a bewildering array of debugging options,但它们似乎都没有显示它正在查看的文件。

任何指针都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

我无法找出任何方法来确定它在看什么,但我确实找到了解决方案。

通过告诉系统将文件系统数据保留在缓存中而不是文件内容,将缓存压力从100降低到10(使用命令sudo sysctl -w vm.vfs_cache_pressure=10)有很大帮助;即使在几个小时之后,它仍然有时间将单个测试cpp文件编译为16秒。

但是在系统一夜之间运行后,编译它第一次回到3:18,而第二次只下降到1:04(第三次是1:01);唯一的区别是系统的其他部分在一夜之间抓住了更多的内存。所以我咬了一口子并为它分配了大约半GB的内存......使用缓存压力设置,似乎已经彻底解决了问题。

我仍然想确切地知道它正在阅读的内容,超过一千兆字节的高速缓存不能容纳所有内容,但现在这已经足够了。