进程使用的实际物理RAM

时间:2015-09-09 16:14:27

标签: linux memory memory-management mmap virtual-memory

如何确定某些进程使用的实际物理RAM?

我可以在/proc/PID/status(或VmRSS' top列)中查看RES。但是,对于使用由同一文件支持的多个映射的进程,此数字不正确。例如,以下代码将几个区域映射到一个小的物理内存窗口。

size_t window_size = ...; // e.g. 128 MiB
size_t total_size = ...;  // e.g. 4 TiB

char path[] = "/dev/shm/window-XXXXXX";

int fd = mkstemp(path);

ftruncate(fd, (off_t)window_size)

void *data = mmap(NULL, total_size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0);

for(ptrdiff_t offset = 0; offset < (ptrdiff_t)total_size; offset += window_size)
{
    mmap( (void *)( (uintptr_t)data + offset ), window_size, PROT_READ|PROT_WRITE, MAP_FIXED|MAP_SHARED|MAP_NORESERVE, fd, 0);
}

现在,如果我查看/proc/PID/status,内核会将VmRSS报告为上述所有窗口的总和。虽然这个数字甚至高于总物理内存大小。

0 个答案:

没有答案