2
#include <sys/sysctl.h>
3
#include <sys/vmmeter.h>
5
#include <vm/vm_param.h>
12
void KCMMemory::fetchValues()
14
/* Stuff for sysctl */
19
sysctlbyname("hw.physmem", &memory, &len, NULL, 0);
23
// total physical memory (without swap space)
24
memoryInfos[TOTAL_MEM] = MEMORY(memory);
28
if (sysctlbyname("vm.stats.vm.v_cache_count", &cached, &len, NULL, 0) == -1 || !len)
29
memoryInfos[CACHED_MEM] = NO_MEMORY_INFO;
31
memoryInfos[CACHED_MEM] = MEMORY(cached) * PAGE_SIZE;
35
if (sysctlbyname("vm.stats.vm.v_free_count", &free, &len, NULL, 0) == -1 || !len)
36
memoryInfos[FREE_MEM] = NO_MEMORY_INFO;
38
memoryInfos[FREE_MEM] = MEMORY(free) * PAGE_SIZE;
40
// added by Brad Hughes bhughes@trolltech.com
44
if (sysctlbyname("vm.vmtotal", &vmem, &len, NULL, 0) == -1 || !len)
45
memoryInfos[SHARED_MEM] = NO_MEMORY_INFO;
47
memoryInfos[SHARED_MEM] = MEMORY(vmem.t_armshr) * PAGE_SIZE;
50
len = sizeof(buffers);
51
if ((sysctlbyname("vfs.bufspace", &buffers, &len, NULL, 0) == -1) || !len)
52
memoryInfos[BUFFER_MEM] = NO_MEMORY_INFO;
54
memoryInfos[BUFFER_MEM] = MEMORY(buffers);
56
struct kvm_swap swap[1];
58
kvm_handle = kvm_open(NULL, _PATH_DEVNULL, NULL, O_RDONLY, "kvm_open");
60
if (kvm_handle != NULL && kvm_getswapinfo(kvm_handle, swap, 1, 0) != -1) {
61
memoryInfos[SWAP_MEM] = MEMORY(swap[0].ksw_total) * PAGE_SIZE;
62
memoryInfos[FREESWAP_MEM] = MEMORY(swap[0].ksw_total - swap[0].ksw_used) * PAGE_SIZE;
65
if (kvm_handle != NULL)
66
kvm_close(kvm_handle);