为什么在使用GNU Linker时Linux不缓存对象和/或“ .so”文件?

时间:2019-03-20 13:57:12

标签: caching linux-kernel ld

在大型项目中链接可执行文件(超过200个)时,即使我在一分钟前已经运行了链接阶段,我也获得每秒0.5个可执行文件的链接速率。 vmstat显示磁盘读取速率超过20MB / s。

但是,如果我使用“ tar cf / dev / null build-dir”预缓存构建目录一次,则我得到的链接速率为每秒4.8个可执行文件,并且磁盘读取速率基本上为零。

为什么当GNU Linker读取目标文件和/或“ .so”文件时,Linux不缓存它们,而tar读取目标文件和/或“ .so”文件呢?有足够的RAM(16GB)。内核版本为4.4.146。 CentOS 7.5。

1 个答案:

答案 0 :(得分:1)

似乎错误地设置了 vm.vfs_cache_pressure = 1000 。将其设置为70可解决该问题并恢复良好的缓存性能。

documentation明确建议不要将值增加到100以上。不幸的是,Internet上充斥着诸如1000之类的疯狂值的示例。