微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当分配模式变化不大时,页面错误数会变高为什么?

如何解决当分配模式变化不大时,页面错误数会变高为什么?

我正在编写一个 C 程序,并注意到一些有趣的事情。程序实现了一个算法,它有一些参数,我可以用这些参数来调整算法。

我使用 perf statvalgrind 测量了一些分配统计信息:

  • ~450 000 malloc调用
  • 总分配内存约为 5 GB
  • 最大分配内存约为 300 MB
  • 缺页次数:~50 000

程序在迭代中分配和释放,这就是为什么总分配量为 5 GB,但最大值仅为 300 MB。

我调整了稍微改变统计数据的算法:

  • ~500 000 malloc
  • 总分配的内存仍然约为 5 GB
  • 最大分配内存约为 250 MB
  • 缺页次数:~400 000!

因此,malloc 统计信息与前一种情况非常相似,但页面错误数量却高出 8 倍。更奇怪的是,大多数额外的页面错误都发生在不受调优影响的地方,这部分代码在两种情况下都完全相同:分配了很多 ~15KB 固定大小的块。在第一种情况下,我在这代码中遇到了很少的页面错误,但在第二种情况下,我得到了很多。

有没有人解释一下为什么在分配模式变化不大的情况下页面错误数量会高得多?

linux 是否对尚未访问的额外内存中的页面应用了一些启发式方法?这种启发式在第一种情况下比第二种情况更有效?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。