2016-11-23 12 views
2

getrusageBSDの `ru_maxrss`の単位は?

long ru_maxrss;  /* max resident set size */ 

BSDオペレーティングシステムで、ru_maxrssの単位は何ですが?含む構造体を返しますか。この値はバイト数またはキロバイトですか? "BSD"とは、FreeBSD、OpenBSDを意味しますが、Mac OS X/Darwinは意味しません。

FreeBSD man pageOpenBSD man pageは、単位はキロバイトであると言う。しかし、私は(オンラインmanページがそう主張していても)ダーウィン/ MacのOS X上で、単位はバイトであることを知っている

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

、およびまた、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()は、ページサイズからキロバイトを計算します。

しかし、誰がカーネルソースを信じるでしょうか?

$ 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の倍数ではないため、バイト数にすることはできません。

関連する問題