2016-11-23 6 views
2

getrusage 반환 BSD 운영 체제에서, ru_maxrss의 단위는 무엇BSD의`ru_maxrss`의 단위입니까?

long ru_maxrss;  /* max resident set size */ 

포함하는 구조체? 이 값은 바이트 또는 킬로바이트 단위입니까? "BSD"는 FreeBSD, OpenBSD를 의미하지만 Mac OS X/Darwin은 의미하지 않습니다. 내가 다윈/맥 OS X에, 단위는 바이트 (온라인 매뉴얼 페이지를 다르게 주장에도 불구하고)에 있다는 것을 알고, 그러나

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

및 :

FreeBSD man page

OpenBSD man page는 단위가 킬로바이트에서 말하는 또한 BSD ru_maxrss에 대한 요청이 바이트 단위로 반환되는 온라인 진술을 발견했습니다 (예 : here 참조). 어느 것이 맞습니까? 에 FreeBSD

답변

1

그것은 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의 배수가 아니므로 바이트가 될 수 없습니다.