]> arthur.barton.de Git - netdata.git/commitdiff
Separate vm.swap_info module
authorVladimir Kobal <vlad@prokk.net>
Thu, 9 Mar 2017 13:41:33 +0000 (15:41 +0200)
committerVladimir Kobal <vlad@prokk.net>
Thu, 9 Mar 2017 13:47:43 +0000 (15:47 +0200)
src/freebsd_sysctl.c
src/plugin_freebsd.c
src/plugin_freebsd.h

index 778f03524e5a64a4dafce9954021724e54f16f09..9e6702f75988b651b87573c4061ecbdbf53dd102 100644 (file)
@@ -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) ||
index 31d632b6a96f6b45f9d2d6e5aa28bfa7dd3bac92..0d4183dd2a839fae98b432d69c3087565ecb682b 100644 (file)
@@ -25,6 +25,7 @@ static struct freebsd_module {
         { .name = "vm.stats.sys.v_soft", .dim = "soft_intr", .enabled = 1, .func = do_vm_stats_sys_v_soft },
         { .name = "vm.stats.sys.v_swtch", .dim = "context_swtch", .enabled = 1, .func = do_vm_stats_sys_v_swtch },
         { .name = "vm.stats.vm.v_forks", .dim = "forks", .enabled = 1, .func = do_vm_stats_sys_v_forks },
+        { .name = "vm.swap_info", .dim = "swap", .enabled = 1, .func = do_vm_swap_info },
 
         // the terminator of this array
         { .name = NULL, .dim = NULL, .enabled = 0, .func = NULL }
index 3ea305590833f243f4a2160be12e0e69b0f7f551..376d4ace9545c71634d5f8d4e0433f93dcbed6fe 100644 (file)
@@ -16,6 +16,7 @@ extern int do_vm_stats_sys_v_intr(int update_every, usec_t dt);
 extern int do_vm_stats_sys_v_soft(int update_every, usec_t dt);
 extern int do_vm_stats_sys_v_swtch(int update_every, usec_t dt);
 extern int do_vm_stats_sys_v_forks(int update_every, usec_t dt);
+extern int do_vm_swap_info(int update_every, usec_t dt);
 
 extern int do_freebsd_sysctl_old(int update_every, usec_t dt);