summaryrefslogtreecommitdiff
path: root/src/modules/sysinfo/memusage/memusage_sysctl.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/sysinfo/memusage/memusage_sysctl.c')
-rw-r--r--src/modules/sysinfo/memusage/memusage_sysctl.c172
1 files changed, 0 insertions, 172 deletions
diff --git a/src/modules/sysinfo/memusage/memusage_sysctl.c b/src/modules/sysinfo/memusage/memusage_sysctl.c
deleted file mode 100644
index f4523aa757..0000000000
--- a/src/modules/sysinfo/memusage/memusage_sysctl.c
+++ /dev/null
@@ -1,172 +0,0 @@
-#include "memusage.h"
-
-#if defined(__FreeBSD__) || defined(__DragonFly__)
-# include <sys/types.h>
-# include <sys/sysctl.h>
-# include <vm/vm_param.h>
-#endif
-
-#if defined(__OpenBSD__)
-# include <sys/param.h>
-# include <sys/sysctl.h>
-# include <sys/swap.h>
-# include <sys/mount.h>
-#endif
-
-#if defined(__FreeBSD__) || defined(__DragonFly__)
-static long int
-_sysctlfromname(const char *name, void *mib, int depth, size_t *len)
-{
- long int result;
-
- if (sysctlnametomib(name, mib, len) < 0) return -1;
-
- *len = sizeof(result);
- if (sysctl(mib, depth, &result, len, NULL, 0) < 0) return -1;
-
- return result;
-}
-
-#endif
-
-void
-_memsize_bytes_to_kb(unsigned long *bytes)
-{
- *bytes = (unsigned int)*bytes >> 10;
-}
-
-void
-_memusage_sysctl_getusage(unsigned long *mem_total,
- unsigned long *mem_used,
- unsigned long *mem_cached,
- unsigned long *mem_buffers,
- unsigned long *mem_shared,
- unsigned long *swp_total,
- unsigned long *swp_used)
-{
- size_t len;
- int i = 0;
- *mem_total = *mem_used = *mem_cached = *mem_buffers = *mem_shared = 0;
- *swp_total = *swp_used = 0;
-#if defined(__FreeBSD__) || defined(__DragonFly__)
- size_t miblen;
- int total_pages = 0, free_pages = 0, inactive_pages = 0;
- long int result = 0;
- int page_size = getpagesize();
-
- int *mib = malloc(sizeof(int) * 4);
- if (mib == NULL) return;
-
- mib[0] = CTL_HW; mib[1] = HW_PHYSMEM;
- len = sizeof(*mem_total);
- if (sysctl(mib, 2, mem_total, &len, NULL, 0) == -1)
- return;
- *mem_total /= 1024;
-
- total_pages = _sysctlfromname("vm.stats.vm.v_page_count", mib, 4, &len);
- if (total_pages < 0) return;
-
- free_pages = _sysctlfromname("vm.stats.vm.v_free_count", mib, 4, &len);
- if (free_pages < 0) return;
-
- inactive_pages = _sysctlfromname("vm.stats.vm.v_inactive_count", mib, 4, &len);
- if (inactive_pages < 0) return;
-
- *mem_used = (total_pages - free_pages - inactive_pages) * page_size;
- _memsize_bytes_to_kb(mem_used);
-
- result = _sysctlfromname("vfs.bufspace", mib, 2, &len);
- if (result < 0) return;
- *mem_buffers = (result);
- _memsize_bytes_to_kb(mem_buffers);
-
- result = _sysctlfromname("vm.stats.vm.v_active_count", mib, 4, &len);
- if (result < 0) return;
- *mem_cached = (result * page_size);
- _memsize_bytes_to_kb(mem_cached);
-
- result = _sysctlfromname("vm.stats.vm.v_cache_count", mib, 4, &len);
- if (result < 0) return;
- *mem_shared = (result * page_size);
- _memsize_bytes_to_kb(mem_shared);
-
- result = _sysctlfromname("vm.swap_total", mib, 2, &len);
- if (result < 0) return;
- *swp_total = (result / 1024);
-
- miblen = 3;
- if (sysctlnametomib("vm.swap_info", mib, &miblen) == -1) return;
-
- struct xswdev xsw;
- // previous mib is important for this one...
-
- for (i = 0; ; i++)
- {
- mib[miblen] = i;
- len = sizeof(xsw);
- if (sysctl(mib, miblen + 1, &xsw, &len, NULL, 0) == -1) break;
-
- *swp_used += (unsigned long)xsw.xsw_used * page_size;
- }
-
- *swp_used >>= 10;
-
- E_FREE(mib);
-#elif defined(__OpenBSD__)
- static int mib[] = { CTL_HW, HW_PHYSMEM64 };
- static int bcstats_mib[] = { CTL_VFS, VFS_GENERIC, VFS_BCACHESTAT };
- struct bcachestats bcstats;
- static int uvmexp_mib[] = { CTL_VM, VM_UVMEXP };
- struct uvmexp uvmexp;
- int nswap, rnswap;
- struct swapent *swdev = NULL;
-
- len = sizeof(*mem_total);
- if (sysctl(mib, 2, mem_total, &len, NULL, 0) == -1)
- return;
-
- len = sizeof(uvmexp);
- if (sysctl(uvmexp_mib, 2, &uvmexp, &len, NULL, 0) == -1)
- return;
-
- len = sizeof(bcstats);
- if (sysctl(bcstats_mib, 3, &bcstats, &len, NULL, 0) == -1)
- return;
-
- // Don't fail if there's not swap!
- nswap = swapctl(SWAP_NSWAP, 0, 0);
- if (nswap == 0) goto swap_out;
-
- swdev = calloc(nswap, sizeof(*swdev));
- if (swdev == NULL) goto swap_out;
-
- rnswap = swapctl(SWAP_STATS, swdev, nswap);
- if (rnswap == -1) goto swap_out;
-
- for (i = 0; i < nswap; i++) // nswap; i++)
- {
- if (swdev[i].se_flags & SWF_ENABLE)
- {
- *swp_used += (swdev[i].se_inuse / (1024 / DEV_BSIZE));
- *swp_total += (swdev[i].se_nblks / (1024 / DEV_BSIZE));
- }
- }
-swap_out:
- if (swdev) E_FREE(swdev);
-
- *mem_total /= 1024;
-
- *mem_cached = (uvmexp.pagesize * bcstats.numbufpages);
- _memsize_bytes_to_kb(mem_cached);
-
- *mem_used = (uvmexp.active * uvmexp.pagesize);
- _memsize_bytes_to_kb(mem_used);
-
- *mem_buffers = (uvmexp.pagesize * (uvmexp.npages - uvmexp.free));
- _memsize_bytes_to_kb(mem_buffers);
-
- *mem_shared = (uvmexp.pagesize * uvmexp.wired);
- _memsize_bytes_to_kb(mem_shared);
-#endif
-}
-