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