c++ - 如何使用写时复制来最小化 c++ 程序的内存消耗?

标签 c++ linux memory optimization profiling

我正在开发一个应用程序,该应用程序最多可 fork 8 次以实现并行性。每个 fork 都有一个来自 fork 时原始进程的内存空间的完整拷贝。 fork 很快,因为 Linux 在进程之间共享页面,并且仅在修改时创建新页面。实际上,我的应用程序的内存消耗增长似乎大约是 3 倍。对于用于识别会降低增长的更改的工具或技术有什么建议吗?

一个想法是查看修改页面的页面碎片。还只是对 fork 进程中分配的内容进行了蛮力检查。无论哪种情况,您都可以推荐哪些技术或工具来执行该分析?

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

最佳答案

您可以使用 vmstatsystemtapglibcmalloc-hooks来监控消费。 您可以使用perf查看故障发生在哪里,以了解消耗的实际影响。

如果您的应用程序在使用大内存池时面临 TLB 压力(例如,您正在处理大量数据),您可以使用大/大页面来减轻 4k 页面的开销。

您还可以使用 madvise 从您的进程中告诉内核您可能会对分配的内存做什么。

关于c++ - 如何使用写时复制来最小化 c++ 程序的内存消耗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13608182/

相关文章:

c++ - 创建一个可以是多种类型的 C++ 数组

linux - 如何在 Centos 7 中使用 firewalld 启用 MPI mpirun

c++ - 未知大小复杂度的堆栈分配

c - 动态分配内存

Java使用的内存多于堆大小(或正确大小的Docker内存限制)

c++ - 新手 : C++ Private Variables

c++ - 整数压缩库

c++ - 重载 << 运算符将 ""更改为 "\n"

linux - 通过交叉电缆连接 BeagleBone?

c++ - 如何将彩色文本输出到 Linux 终端?