【发布时间】:2012-10-29 19:24:56
【问题描述】:
我在谷歌和这个网站上搜索了我的问题,但我仍然不明白解决方案。
我有一段MPI 程序,其中RECV 一些数据。程序在大数组上崩溃并出现虚拟内存不足的错误,所以我开始考虑/proc/self/status文件。
在MPI_RECV 之前是:
Name: model.exe
VmPeak: 841640 kB
VmSize: 841640 kB
VmHWM: 15100 kB
VmRSS: 15100 kB
VmData: 760692 kB
之后:
Name: model.exe
VmPeak: 841640 kB
VmSize: 841640 kB
VmHWM: 719980 kB
VmRSS: 719980 kB
VmData: 760692 kB
我在 Ubuntu 上对其进行了测试,通过系统监视器我看到内存在增加。但是我很困惑VmSize(和VmPeak)参数没有变化。
问题是——实际内存使用的指标是什么?
这是否意味着,真正的指标是VmRSS? (而VmSize 仅分配但仍未使用内存)
【问题讨论】:
-
查看
/proc/self/maps内部,并考虑在使用gfortran -Wall -g编译后使用valgrind -
那里的代码真的没有任何意义。我知道内部
MPI缓冲区并了解内存增长的原因。但我不明白如何跟踪这个过程。我以为我可以看看VmSize,但这个例子告诉我这个参数是一样的,而系统监视器显示增加。我的问题是关于VmSize、VmRss和实际内存使用之间的关系。 -
VmRSS测量进程内存的一部分,它实际上由物理内存页面支持。如果您的程序分配 1 GiB 并触摸所有这些,那么VmRSS将增加 1 GiB。如果那时您的程序处于休眠状态一段时间,操作系统可能会将该 1 GiB 的一部分分页到交换区域,并且VmRSS会随着分页数量而减少。有关该过程的更详细说明,请参阅我的回答。