进程使用的实际物理RAM

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

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

 size_t window_size = ...; // eg 128 MiB size_t total_size = ...; // eg 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报告为上述所有窗口的总和。 尽pipe这个数字甚至高于总的物理内存大小。