LINUX.ORG.RU

История изменений

Исправление 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
...

ну а «реально» оно где-то между, в разбросе.