История изменений
Исправление quasimoto, (текущая версия) :
Отовсюду, но там утверждается, что rss = resident = vm_rss * 1024 / page_size и size = vm_size * 1024 / page_size, то есть оно просто в разных единицах. Вот так я разницы не увидел:
#include <cstdio>
#include <unistd.h>
#include <proc/readproc.h>
const long page_size = sysconf(_SC_PAGESIZE);
int main() {
PROCTAB* ps = openproc(PROC_FILLMEM | PROC_FILLSTAT | PROC_FILLSTATUS);
static proc_t i;
printf("%*s\t%*s\t%*s\t%*s\t%*s\t%*s\n\n", 10, "process",
10, "rss", 10, "rss", 10, "rss", 10, "vm_size", 10, "vm_size");
while (readproc(ps, &i) != 0)
printf("%10s\t%10ld\t%10ld\t%10ld\t%10ld\t%10ld\n",
i.cmd,
i.rss * page_size, i.resident * page_size, i.vm_rss * 1024, // rss
i.size * page_size, i.vm_size * 1024 // vm_size
);
}
$ ./a.out
process rss rss rss vm_size vm_size
init 712704 712704 712704 4337664 4337664
...
$ strace ./a.out 2>&1 | grep proc
...
stat("/proc/1", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
open("/proc/1/stat", O_RDONLY) = 4
open("/proc/1/statm", O_RDONLY) = 4
open("/proc/1/status", O_RDONLY) = 4
...
ну а «реально» оно где-то между, в разбросе.
Исходная версия quasimoto, :
Отовсюду, но там утверждается, что rss = resident = vm_rss * 1024 / page_size и size = vm_size * 1024 / page_size, то есть оно просто в разных единицах. Вот так я разницы не увидел:
#include <cstdio>
#include <string.h>
#include <unistd.h>
#include <proc/readproc.h>
const long page_size = sysconf(_SC_PAGESIZE);
int main() {
PROCTAB* ps = openproc(PROC_FILLMEM | PROC_FILLSTAT | PROC_FILLSTATUS);
proc_t i;
memset(&i, 0, sizeof(proc_t));
printf("%*s\t%*s\t%*s\t%*s\t%*s\t%*s\n\n", 10, "process",
10, "rss", 10, "rss", 10, "rss", 10, "vm_size", 10, "vm_size");
while (readproc(ps, &i) != 0)
printf("%10s\t%10ld\t%10ld\t%10ld\t%10ld\t%10ld\n",
i.cmd,
i.rss * page_size, i.resident * page_size, i.vm_rss * 1024, // rss
i.size * page_size, i.vm_size * 1024 // vm_size
);
}
$ ./a.out
process rss rss rss vm_size vm_size
init 712704 712704 712704 4337664 4337664
...
$ strace ./a.out 2>&1 | grep proc
...
stat("/proc/1", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
open("/proc/1/stat", O_RDONLY) = 4
open("/proc/1/statm", O_RDONLY) = 4
open("/proc/1/status", O_RDONLY) = 4
...
ну а «реально» оно где-то между, в разбросе.