Przeglądaj źródła

Add ram and swap components on FreeBSD

master
Michael Buch 5 lat temu
committed by Aaron Marcher
rodzic
commit
a1ac203d16
2 zmienionych plików z 147 dodań i 0 usunięć
  1. +63
    -0
      components/ram.c
  2. +84
    -0
      components/swap.c

+ 63
- 0
components/ram.c Wyświetl plik

@@ -156,4 +156,67 @@

return NULL;
}
#elif defined(__FreeBSD__)
#include <sys/sysctl.h>
#include <sys/vmmeter.h>
#include <unistd.h>
#include <vm/vm_param.h>

const char *
ram_free(void) {
struct vmtotal vm_stats;
int mib[] = {CTL_VM, VM_TOTAL};
size_t len;

len = sizeof(struct vmtotal);
if (sysctl(mib, 2, &vm_stats, &len, NULL, 0) == -1
|| !len)
return NULL;

return fmt_human(vm_stats.t_free * getpagesize(), 1024);
}

const char *
ram_total(void) {
long npages;
size_t len;

len = sizeof(npages);
if (sysctlbyname("vm.stats.vm.v_page_count", &npages, &len, NULL, 0) == -1
|| !len)
return NULL;

return fmt_human(npages * getpagesize(), 1024);
}

const char *
ram_perc(void) {
long npages;
long active;
size_t len;

len = sizeof(npages);
if (sysctlbyname("vm.stats.vm.v_page_count", &npages, &len, NULL, 0) == -1
|| !len)
return NULL;

if (sysctlbyname("vm.stats.vm.v_active_count", &active, &len, NULL, 0) == -1
|| !len)
return NULL;

return bprintf("%d", active * 100 / npages);
}

const char *
ram_used(void) {
long active;
size_t len;

len = sizeof(active);
if (sysctlbyname("vm.stats.vm.v_active_count", &active, &len, NULL, 0) == -1
|| !len)
return NULL;

return fmt_human(active * getpagesize(), 1024);
}
#endif

+ 84
- 0
components/swap.c Wyświetl plik

@@ -197,4 +197,88 @@

return fmt_human(used * 1024, 1024);
}
#elif defined(__FreeBSD__)
#include <stdlib.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <kvm.h>

static int getswapinfo(struct kvm_swap *swap_info, size_t size)
{
kvm_t *kd;

kd = kvm_openfiles(NULL, "/dev/null", NULL, 0, NULL);
if(kd == NULL) {
warn("kvm_openfiles '/dev/null':");
return 0;
}

if(kvm_getswapinfo(kd, swap_info, size, 0 /* Unused flags */) == -1) {
warn("kvm_getswapinfo:");
kvm_close(kd);
return 0;
}

kvm_close(kd);
return 1;
}

const char *
swap_free(void)
{
struct kvm_swap swap_info[1];
long used, total;

if(!getswapinfo(swap_info, 1))
return NULL;

total = swap_info[0].ksw_total;
used = swap_info[0].ksw_used;

return fmt_human((total - used) * getpagesize(), 1024);
}

const char *
swap_perc(void)
{
struct kvm_swap swap_info[1];
long used, total;

if(!getswapinfo(swap_info, 1))
return NULL;

total = swap_info[0].ksw_total;
used = swap_info[0].ksw_used;

return bprintf("%d", used * 100 / total);
}

const char *
swap_total(void)
{
struct kvm_swap swap_info[1];
long total;

if(!getswapinfo(swap_info, 1))
return NULL;

total = swap_info[0].ksw_total;

return fmt_human(total * getpagesize(), 1024);
}

const char *
swap_used(void)
{
struct kvm_swap swap_info[1];
long used;

if(!getswapinfo(swap_info, 1))
return NULL;

used = swap_info[0].ksw_used;

return fmt_human(used * getpagesize(), 1024);
}
#endif

Ładowanie…
Anuluj
Zapisz