From 7d61e468b2a40dbb3a8a09f641f6766123ea320a Mon Sep 17 00:00:00 2001 From: Doug MacEachern Date: Wed, 9 Feb 2005 04:19:55 +0000 Subject: [PATCH] freebsd memory metrics --- src/os/darwin/darwin_sigar.c | 23 ++++++++++++++++++----- src/os/darwin/sigar_os.h | 1 + 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/os/darwin/darwin_sigar.c b/src/os/darwin/darwin_sigar.c index d1799189..551a3535 100644 --- a/src/os/darwin/darwin_sigar.c +++ b/src/os/darwin/darwin_sigar.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #endif @@ -38,6 +39,7 @@ static int get_koffsets(sigar_t *sigar) int i; struct nlist klist[] = { { "_cp_time" }, + { "_cnt" }, { NULL } }; @@ -104,6 +106,8 @@ int sigar_os_open(sigar_t **sigar) (*sigar)->boot_time = boottime.tv_sec; /* XXX seems off a bit */ + (*sigar)->pagesize = getpagesize(); + (*sigar)->last_pid = -1; (*sigar)->pinfo = NULL; @@ -131,7 +135,6 @@ int sigar_mem_get(sigar_t *sigar, sigar_mem_t *mem) vm_statistics_data_t vmstat; kern_return_t status; mach_msg_type_number_t count = sizeof(vmstat) / sizeof(integer_t); -#endif int mib[2]; int totmem; size_t len = sizeof(totmem); @@ -150,9 +153,6 @@ int sigar_mem_get(sigar_t *sigar, sigar_mem_t *mem) mem->total = totmem; - sigar_mem_calc_ram(sigar, mem); - -#ifdef DARWIN status = host_statistics(sigar->mach_port, HOST_VM_INFO, (host_info_t)&vmstat, &count); @@ -162,12 +162,25 @@ int sigar_mem_get(sigar_t *sigar, sigar_mem_t *mem) mem->free = vmstat.free_count * sigar->pagesize; #else - mem->free = 1; /*XXX*/ + int status; + struct vmmeter vmem; + + status = kread(sigar, &vmem, sizeof(vmem), + sigar->koffsets[KOFFSET_VMMETER]); + + if (status != SIGAR_OK) { + return status; + } + + mem->total = vmem.v_page_count * sigar->pagesize; + mem->free = vmem.v_free_count * sigar->pagesize; #endif mem->used = mem->total - mem->free; mem->shared = SIGAR_FIELD_NOTIMPL; /*XXX*/ + sigar_mem_calc_ram(sigar, mem); + mem->actual_free = mem->free; mem->actual_used = mem->used; diff --git a/src/os/darwin/sigar_os.h b/src/os/darwin/sigar_os.h index 18222e8b..e9ca4ce3 100644 --- a/src/os/darwin/sigar_os.h +++ b/src/os/darwin/sigar_os.h @@ -12,6 +12,7 @@ enum { KOFFSET_CPUINFO, + KOFFSET_VMMETER, KOFFSET_MAX };