如何使用copy-on-write最小化c ++程序的内存消耗?

时间:2012-11-28 15:07:20

标签: c++ linux memory optimization profiling

我正在开发一个应用程序,它可以自行调整8次并行性。每个fork都有一个fork的时候原始进程的内存空间的完整副本。这些分支很快,因为Linux在进程之间共享页面,只在修改它们时才创建新的分页。在实践中,内存消耗的增长似乎是我应用程序的3倍左右。是否有任何关于工具或技术的建议,用于识别会减少这种增长的变化?

一种想法是查看已修改页面的页面碎片。还有一种强力检查分叉过程中分配的内容。在任何一种情况下,您可以推荐哪些技术或工具来执行分析?

请记住,即使使用并行性,该程序也需要几个小时才能完成,并且内存占用量高达1TB,因此仪器选项有限。

1 个答案:

答案 0 :(得分:2)

您可以使用vmstatsystemtap和/或glibc的{​​{3}}来监控消费情况。 您可以使用perf查看故障发生的位置,以了解消费的实际影响。

如果您的应用程序在使用大内存池时面临TLB压力(例如,您通过大量数据流式传输),则可以使用大/大页面来减轻4k页的开销。

您还可以使用madvise在您的进程中告诉内核您可能要对已分配的内存执行哪些操作。