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

问题描述

我正在编写一个 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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...