我正在开发一个应用程序,它可以自行调整8次并行性。每个fork都有一个fork的时候原始进程的内存空间的完整副本。这些分支很快,因为Linux在进程之间共享页面,只在修改它们时才创建新的分页。在实践中,内存消耗的增长似乎是我应用程序的3倍左右。是否有任何关于工具或技术的建议,用于识别会减少这种增长的变化?
一种想法是查看已修改页面的页面碎片。还有一种强力检查分叉过程中分配的内容。在任何一种情况下,您可以推荐哪些技术或工具来执行分析?
请记住,即使使用并行性,该程序也需要几个小时才能完成,并且内存占用量高达1TB,因此仪器选项有限。
答案 0 :(得分:2)
您可以使用vmstat
,systemtap
和/或glibc
的{{3}}来监控消费情况。
您可以使用perf
查看故障发生的位置,以了解消费的实际影响。
如果您的应用程序在使用大内存池时面临TLB压力(例如,您通过大量数据流式传输),则可以使用大/大页面来减轻4k页的开销。
您还可以使用madvise
在您的进程中告诉内核您可能要对已分配的内存执行哪些操作。