BSD 上 `ru_maxrss` 的单位?
Units of `ru_maxrss` on BSD?
getrusage
returns 包含
的结构
long ru_maxrss; /* max resident set size */
在 BSD 操作系统上 ru_maxrss
的单位是什么?这个值是以字节为单位还是以千字节为单位? "BSD",我指的是 FreeBSD、OpenBSD,但不是 Mac OS X / Darwin。
FreeBSD man page and OpenBSD man page表示单位是千字节:
ru_maxrss the maximum resident set size utilized (in kilobytes).
但是,我知道在 Darwin / Mac OS X 上,单位是字节(尽管在线手册页另有说明),而且我还在网上找到了一些声明在 BSD 上 ru_maxrss
也以字节为单位返回(参见 here)。哪个是正确的?
在 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 的倍数,所以不能是字节。
getrusage
returns 包含
long ru_maxrss; /* max resident set size */
在 BSD 操作系统上 ru_maxrss
的单位是什么?这个值是以字节为单位还是以千字节为单位? "BSD",我指的是 FreeBSD、OpenBSD,但不是 Mac OS X / Darwin。
FreeBSD man page and OpenBSD man page表示单位是千字节:
ru_maxrss the maximum resident set size utilized (in kilobytes).
但是,我知道在 Darwin / Mac OS X 上,单位是字节(尽管在线手册页另有说明),而且我还在网上找到了一些声明在 BSD 上 ru_maxrss
也以字节为单位返回(参见 here)。哪个是正确的?
在 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 的倍数,所以不能是字节。