freebsd memory metrics
This commit is contained in:
		
							parent
							
								
									d879ff5bb8
								
							
						
					
					
						commit
						7d61e468b2
					
				@ -12,6 +12,7 @@
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <sys/param.h>
 | 
			
		||||
#include <sys/user.h>
 | 
			
		||||
#include <sys/vmmeter.h>
 | 
			
		||||
#include <fcntl.h>
 | 
			
		||||
#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;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -12,6 +12,7 @@
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
    KOFFSET_CPUINFO,
 | 
			
		||||
    KOFFSET_VMMETER,
 | 
			
		||||
    KOFFSET_MAX
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user