美文网首页
Linux OS缓存对程序性能影响

Linux OS缓存对程序性能影响

作者: Caucher | 来源:发表于2021-09-10 19:59 被阅读0次

    最近又出现了一个问题:同样的一个C程序,在同样的数据集,单线程,在不同的机器上跑,性能差距高达30倍以上(30s/1000s)。程序内存消耗不足300MB,数据集大小近100GB。
    这两台机器的配置分别是:

    • 30s:Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz, 128GB RAM
    • 1000s:Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz, 16GB RAM

    分别称A和B机器。
    从主频来看,B机器的CPU反而更高一些(查阅CPU天梯表,Core i7型号的CPU跑分也高一些)。
    那么问题应该出在内存上。通过free -h命令查看内存使用情况,发现A机器RAM的buffered/cached高达100GB以上。这立即引起了我的警觉,会不会是数据集被缓存进了系统内存?

    于是释放缓存(sync; echo 3 > /proc/sys/vm/drop_caches)
    然后再执行程序,好了,A机器执行无比缓慢。

    究其原因,我的程序是一个基于索引的查询算法,这个程序刚好运行在索引构建算法之后,因此查询时涉及到的源数据访问,全都在索引构建算法的访问范围之内,因此被缓存进内存。

    这也提了个醒,任何比较效率的算法,首先要在程序运行前清空缓存,否则不能反映真实情况,因为I/O的代价可能都变成了内存访问,使得结果过于乐观。

    相关文章

      网友评论

          本文标题:Linux OS缓存对程序性能影响

          本文链接:https://www.haomeiwen.com/subject/foynwltx.html