X-Git-Url: https://arthur.barton.de/gitweb/?p=netdata.git;a=blobdiff_plain;f=src%2Ffreebsd_sysctl.c;h=9e6702f75988b651b87573c4061ecbdbf53dd102;hp=778f03524e5a64a4dafce9954021724e54f16f09;hb=8010f3334c859dcff0ab4954020e9ff9a15a3823;hpb=a7fe8a2acaf490ce7de877cbc5a808cf816f6710 diff --git a/src/freebsd_sysctl.c b/src/freebsd_sysctl.c index 778f0352..9e6702f7 100644 --- a/src/freebsd_sysctl.c +++ b/src/freebsd_sysctl.c @@ -534,6 +534,9 @@ int do_vm_stats_sys_v_soft(int update_every, usec_t dt) { error("DISABLED: vm.stats.sys.v_soft module"); return 1; } else { + + // -------------------------------------------------------------------- + static RRDSET *st = NULL; static RRDDIM *rd = NULL; @@ -573,6 +576,9 @@ int do_vm_stats_sys_v_swtch(int update_every, usec_t dt) { error("DISABLED: vm.stats.sys.v_swtch module"); return 1; } else { + + // -------------------------------------------------------------------- + static RRDSET *st = NULL; static RRDDIM *rd = NULL; @@ -612,6 +618,9 @@ int do_vm_stats_sys_v_forks(int update_every, usec_t dt) { error("DISABLED: vm.stats.sys.v_swtch module"); return 1; } else { + + // -------------------------------------------------------------------- + static RRDSET *st = NULL; static RRDDIM *rd = NULL; @@ -641,6 +650,81 @@ int do_vm_stats_sys_v_forks(int update_every, usec_t dt) { return 0; } +// -------------------------------------------------------------------------------------------------------------------- +// vm.swap_info + +int do_vm_swap_info(int update_every, usec_t dt) { + static int mib[3] = {0, 0, 0}; + + if (unlikely(getsysctl_mib("vm.swap_info", mib, 2))) { + error("DISABLED: system.swap chart"); + error("DISABLED: vm.swap_info module"); + return 1; + } else { + int i; + struct xswdev xsw; + struct total_xsw { + collected_number bytes_used; + collected_number bytes_total; + } total_xsw = {0, 0}; + + for (i = 0; ; i++) { + size_t size; + + mib[2] = i; + size = sizeof(xsw); + if (unlikely(sysctl(mib, 3, &xsw, &size, NULL, 0) == -1 )) { + if (unlikely(errno != ENOENT)) { + error("FREEBSD: sysctl(%s...) failed: %s", "vm.swap_info", strerror(errno)); + error("DISABLED: system.swap chart"); + error("DISABLED: vm.swap_info module"); + return 1; + } else { + if (unlikely(size != sizeof(xsw))) { + error("FREEBSD: sysctl(%s...) expected %lu, got %lu", "vm.swap_info", (unsigned long)sizeof(xsw), (unsigned long)size); + error("DISABLED: system.swap chart"); + error("DISABLED: vm.swap_info module"); + return 1; + } else break; + } + } + total_xsw.bytes_used += xsw.xsw_used; + total_xsw.bytes_total += xsw.xsw_nblks; + } + + // -------------------------------------------------------------------- + + static RRDSET *st = NULL; + static RRDDIM *rd_free = NULL, *rd_used = NULL; + + if (unlikely(!st)) { + st = rrdset_create_localhost("system", + "swap", + NULL, + "swap", + NULL, + "System Swap", + "MB", + 201, + update_every, + RRDSET_TYPE_STACKED + ); + + rrdset_flag_set(st, RRDSET_FLAG_DETAIL); + + rd_free = rrddim_add(st, "free", NULL, system_pagesize, MEGA_FACTOR, RRD_ALGORITHM_ABSOLUTE); + rd_used = rrddim_add(st, "used", NULL, system_pagesize, MEGA_FACTOR, RRD_ALGORITHM_ABSOLUTE); + } + else rrdset_next(st); + + rrddim_set_by_pointer(st, rd_free, total_xsw.bytes_total - total_xsw.bytes_used); + rrddim_set_by_pointer(st, rd_used, total_xsw.bytes_used); + rrdset_done(st); + } + + return 0; +} + // -------------------------------------------------------------------------------------------------------------------- // old sources @@ -651,7 +735,7 @@ int do_vm_stats_sys_v_forks(int update_every, usec_t dt) { #define IFA_DATA(s) (((struct if_data *)ifa->ifa_data)->ifi_ ## s) int do_freebsd_sysctl_old(int update_every, usec_t dt) { - static int do_disk_io = -1, do_swap = -1, do_ram = -1, do_swapio = -1, + static int do_disk_io = -1, do_ram = -1, do_swapio = -1, do_pgfaults = -1, do_ipc_semaphores = -1, do_ipc_shared_mem = -1, do_ipc_msg_queues = -1, do_netisr = -1, do_netisr_per_core = -1, do_bandwidth = -1, do_tcp_sockets = -1, do_tcp_packets = -1, do_tcp_errors = -1, do_tcp_handshake = -1, @@ -664,7 +748,6 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) { if (unlikely(do_uptime == -1)) { do_disk_io = config_get_boolean("plugin:freebsd:sysctl", "stats for all disks", 1); - do_swap = config_get_boolean("plugin:freebsd:sysctl", "system swap", 1); do_ram = config_get_boolean("plugin:freebsd:sysctl", "system ram", 1); do_swapio = config_get_boolean("plugin:freebsd:sysctl", "swap i/o", 1); do_pgfaults = config_get_boolean("plugin:freebsd:sysctl", "memory page faults", 1); @@ -740,15 +823,6 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) { collected_number busy_time_ms; } prev_dstat; - // NEEDED BY: do_swap - size_t mibsize; - int mib[3]; // CTL_MAXNAME = 24 maximum mib components (sysctl.h) - struct xswdev xsw; - struct total_xsw { - collected_number bytes_used; - collected_number bytes_total; - } total_xsw = {0, 0}; - // NEEDED BY: do_swapio, do_ram struct vmmeter vmmeter_data; @@ -1017,54 +1091,6 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) { // -------------------------------------------------------------------- - - if (likely(do_swap)) { - mibsize = sizeof mib / sizeof mib[0]; - if (unlikely(sysctlnametomib("vm.swap_info", mib, &mibsize) == -1)) { - error("FREEBSD: sysctl(%s...) failed: %s", "vm.swap_info", strerror(errno)); - do_swap = 0; - error("DISABLED: system.swap"); - } else { - for (i = 0; ; i++) { - mib[mibsize] = i; - size = sizeof(xsw); - if (unlikely(sysctl(mib, mibsize + 1, &xsw, &size, NULL, 0) == -1 )) { - if (unlikely(errno != ENOENT)) { - error("FREEBSD: sysctl(%s...) failed: %s", "vm.swap_info", strerror(errno)); - do_swap = 0; - error("DISABLED: system.swap"); - } else { - if (unlikely(size != sizeof(xsw))) { - error("FREEBSD: sysctl(%s...) expected %lu, got %lu", "vm.swap_info", (unsigned long)sizeof(xsw), (unsigned long)size); - do_swap = 0; - error("DISABLED: system.swap"); - } else break; - } - } - total_xsw.bytes_used += xsw.xsw_used; - total_xsw.bytes_total += xsw.xsw_nblks; - } - - if (likely(do_swap)) { - st = rrdset_find_localhost("system.swap"); - if (unlikely(!st)) { - st = rrdset_create_localhost("system", "swap", NULL, "swap", NULL, "System Swap", "MB", 201, update_every, RRDSET_TYPE_STACKED); - rrdset_flag_set(st, RRDSET_FLAG_DETAIL); - - rrddim_add(st, "free", NULL, system_pagesize, MEGA_FACTOR, RRD_ALGORITHM_ABSOLUTE); - rrddim_add(st, "used", NULL, system_pagesize, MEGA_FACTOR, RRD_ALGORITHM_ABSOLUTE); - } - else rrdset_next(st); - - rrddim_set(st, "used", total_xsw.bytes_used); - rrddim_set(st, "free", total_xsw.bytes_total - total_xsw.bytes_used); - rrdset_done(st); - } - } - } - - // -------------------------------------------------------------------- - if (likely(do_ram)) { if (unlikely(GETSYSCTL_BY_NAME("vm.stats.vm.v_active_count", vmmeter_data.v_active_count) || GETSYSCTL_BY_NAME("vm.stats.vm.v_inactive_count", vmmeter_data.v_inactive_count) ||