2016-11-23 97 views
2

getrusage返回包含BSD上的`ru_maxrss`单位?

long ru_maxrss;  /* max resident set size */ 

什么是ru_maxrss单位,在BSD操作系统的一个结构?这个值是以字节为单位,还是以千字节为单位? “BSD”是指FreeBSD,OpenBSD,但不是Mac OS X/Darwin。

FreeBSD man pageOpenBSD man page说,单位是千字节:

ru_maxrss the maximum resident set size utilized (in kilobytes). 

但是,我知道,在达尔文/ Mac OS X上,单位是字节(即使联机手册页另有要求),并我还发现一些在线声明,BSD ru_maxrss上的声明也以字节返回(请参阅,例如here)。哪个是对的?

回答

1

在FreeBSD它在千字节,在kern_clock.c证明来源:

/* Update resource usage integrals and maximums. */ 
MPASS(p->p_vmspace != NULL); 
vm = p->p_vmspace; 
ru = &td->td_ru; 
ru->ru_ixrss += pgtok(vm->vm_tsize) * cnt; 
ru->ru_idrss += pgtok(vm->vm_dsize) * cnt; 
ru->ru_isrss += pgtok(vm->vm_ssize) * cnt; 
rss = pgtok(vmspace_resident_count(vm)); 
if (ru->ru_maxrss < rss) 
    ru->ru_maxrss = rss; 

pgtok()从页面大小计算KB。

但是谁会相信内核的来源?让我们运行程序:

$ cat x.c 
#include <sys/types.h> 
#include <sys/time.h> 
#include <sys/resource.h> 
#include <stdio.h> 

int main(void) 
{ 
    struct rusage r; 

    if (getrusage(RUSAGE_SELF, &r) == 0) { 
     printf ("ru_maxrss=%lu\n", (unsigned long)r.ru_maxrss); 
    } 
    return 0; 
} 
$ ./a.out 
ru_maxrss=5824 
$ ./a.out 
ru_maxrss=0 
$ ./a.out 
ru_maxrss=216 
$ ./a.out 
ru_maxrss=1880 

这些数字不是1024的倍数,所以不能是字节。