Separate vm.swap_info module
Vladimir Kobal committed
Mar 9, 2017 at 15:41 UTC
8010f3334c859dcff0ab4954020e9ff9a15a3823
3 files changed
+87
-59
src/freebsd_sysctl.c
+85
-59
@@ -534,6 +534,9 @@ int do_vm_stats_sys_v_soft(int update_every, usec_t dt) {
534
error("DISABLED: vm.stats.sys.v_soft module");
535
return 1;
536
} else {
537
+
538
+ // --------------------------------------------------------------------
539
+
540
static RRDSET *st = NULL;
541
static RRDDIM *rd = NULL;
542
@@ -573,6 +576,9 @@ int do_vm_stats_sys_v_swtch(int update_every, usec_t dt) {
576
error("DISABLED: vm.stats.sys.v_swtch module");
577
return 1;
578
} else {
579
+
580
+ // --------------------------------------------------------------------
581
+
582
static RRDSET *st = NULL;
583
static RRDDIM *rd = NULL;
584
@@ -612,6 +618,9 @@ int do_vm_stats_sys_v_forks(int update_every, usec_t dt) {
618
error("DISABLED: vm.stats.sys.v_swtch module");
619
return 1;
620
} else {
621
+
622
+ // --------------------------------------------------------------------
623
+
624
static RRDSET *st = NULL;
625
static RRDDIM *rd = NULL;
626
@@ -641,6 +650,81 @@ int do_vm_stats_sys_v_forks(int update_every, usec_t dt) {
650
return 0;
651
}
652
653
+// --------------------------------------------------------------------------------------------------------------------
654
+// vm.swap_info
655
+
656
+int do_vm_swap_info(int update_every, usec_t dt) {
657
+ static int mib[3] = {0, 0, 0};
658
+
659
+ if (unlikely(getsysctl_mib("vm.swap_info", mib, 2))) {
660
+ error("DISABLED: system.swap chart");
661
+ error("DISABLED: vm.swap_info module");
662
+ return 1;
663
+ } else {
664
+ int i;
665
+ struct xswdev xsw;
666
+ struct total_xsw {
667
+ collected_number bytes_used;
668
+ collected_number bytes_total;
669
+ } total_xsw = {0, 0};
670
+
671
+ for (i = 0; ; i++) {
672
+ size_t size;
673
+
674
+ mib[2] = i;
675
+ size = sizeof(xsw);
676
+ if (unlikely(sysctl(mib, 3, &xsw, &size, NULL, 0) == -1 )) {
677
+ if (unlikely(errno != ENOENT)) {
678
+ error("FREEBSD: sysctl(%s...) failed: %s", "vm.swap_info", strerror(errno));
679
+ error("DISABLED: system.swap chart");
680
+ error("DISABLED: vm.swap_info module");
681
+ return 1;
682
+ } else {
683
+ if (unlikely(size != sizeof(xsw))) {
684
+ error("FREEBSD: sysctl(%s...) expected %lu, got %lu", "vm.swap_info", (unsigned long)sizeof(xsw), (unsigned long)size);
685
+ error("DISABLED: system.swap chart");
686
+ error("DISABLED: vm.swap_info module");
687
+ return 1;
688
+ } else break;
689
+ }
690
+ }
691
+ total_xsw.bytes_used += xsw.xsw_used;
692
+ total_xsw.bytes_total += xsw.xsw_nblks;
693
+ }
694
+
695
+ // --------------------------------------------------------------------
696
+
697
+ static RRDSET *st = NULL;
698
+ static RRDDIM *rd_free = NULL, *rd_used = NULL;
699
+
700
+ if (unlikely(!st)) {
701
+ st = rrdset_create_localhost("system",
702
+ "swap",
703
+ NULL,
704
+ "swap",
705
+ NULL,
706
+ "System Swap",
707
+ "MB",
708
+ 201,
709
+ update_every,
710
+ RRDSET_TYPE_STACKED
711
+ );
712
+
713
+ rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
714
+
715
+ rd_free = rrddim_add(st, "free", NULL, system_pagesize, MEGA_FACTOR, RRD_ALGORITHM_ABSOLUTE);
716
+ rd_used = rrddim_add(st, "used", NULL, system_pagesize, MEGA_FACTOR, RRD_ALGORITHM_ABSOLUTE);
717
+ }
718
+ else rrdset_next(st);
719
+
720
+ rrddim_set_by_pointer(st, rd_free, total_xsw.bytes_total - total_xsw.bytes_used);
721
+ rrddim_set_by_pointer(st, rd_used, total_xsw.bytes_used);
722
+ rrdset_done(st);
723
+ }
724
+
725
+ return 0;
726
+}
727
+
728
// --------------------------------------------------------------------------------------------------------------------
729
// old sources
730
@@ -651,7 +735,7 @@ int do_vm_stats_sys_v_forks(int update_every, usec_t dt) {
735
#define IFA_DATA(s) (((struct if_data *)ifa->ifa_data)->ifi_ ## s)
736
737
int do_freebsd_sysctl_old(int update_every, usec_t dt) {
654
- static int do_disk_io = -1, do_swap = -1, do_ram = -1, do_swapio = -1,
738
+ static int do_disk_io = -1, do_ram = -1, do_swapio = -1,
739
do_pgfaults = -1, do_ipc_semaphores = -1, do_ipc_shared_mem = -1, do_ipc_msg_queues = -1,
740
do_netisr = -1, do_netisr_per_core = -1, do_bandwidth = -1,
741
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) {
748
749
if (unlikely(do_uptime == -1)) {
750
do_disk_io = config_get_boolean("plugin:freebsd:sysctl", "stats for all disks", 1);
667
- do_swap = config_get_boolean("plugin:freebsd:sysctl", "system swap", 1);
751
do_ram = config_get_boolean("plugin:freebsd:sysctl", "system ram", 1);
752
do_swapio = config_get_boolean("plugin:freebsd:sysctl", "swap i/o", 1);
753
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) {
823
collected_number busy_time_ms;
824
} prev_dstat;
825
743
- // NEEDED BY: do_swap
744
- size_t mibsize;
745
- int mib[3]; // CTL_MAXNAME = 24 maximum mib components (sysctl.h)
746
- struct xswdev xsw;
747
- struct total_xsw {
748
- collected_number bytes_used;
749
- collected_number bytes_total;
750
- } total_xsw = {0, 0};
751
-
826
// NEEDED BY: do_swapio, do_ram
827
struct vmmeter vmmeter_data;
828
@@ -1017,54 +1091,6 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
1091
1092
// --------------------------------------------------------------------
1093
1020
-
1021
- if (likely(do_swap)) {
1022
- mibsize = sizeof mib / sizeof mib[0];
1023
- if (unlikely(sysctlnametomib("vm.swap_info", mib, &mibsize) == -1)) {
1024
- error("FREEBSD: sysctl(%s...) failed: %s", "vm.swap_info", strerror(errno));
1025
- do_swap = 0;
1026
- error("DISABLED: system.swap");
1027
- } else {
1028
- for (i = 0; ; i++) {
1029
- mib[mibsize] = i;
1030
- size = sizeof(xsw);
1031
- if (unlikely(sysctl(mib, mibsize + 1, &xsw, &size, NULL, 0) == -1 )) {
1032
- if (unlikely(errno != ENOENT)) {
1033
- error("FREEBSD: sysctl(%s...) failed: %s", "vm.swap_info", strerror(errno));
1034
- do_swap = 0;
1035
- error("DISABLED: system.swap");
1036
- } else {
1037
- if (unlikely(size != sizeof(xsw))) {
1038
- error("FREEBSD: sysctl(%s...) expected %lu, got %lu", "vm.swap_info", (unsigned long)sizeof(xsw), (unsigned long)size);
1039
- do_swap = 0;
1040
- error("DISABLED: system.swap");
1041
- } else break;
1042
- }
1043
- }
1044
- total_xsw.bytes_used += xsw.xsw_used;
1045
- total_xsw.bytes_total += xsw.xsw_nblks;
1046
- }
1047
-
1048
- if (likely(do_swap)) {
1049
- st = rrdset_find_localhost("system.swap");
1050
- if (unlikely(!st)) {
1051
- st = rrdset_create_localhost("system", "swap", NULL, "swap", NULL, "System Swap", "MB", 201, update_every, RRDSET_TYPE_STACKED);
1052
- rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
1053
-
1054
- rrddim_add(st, "free", NULL, system_pagesize, MEGA_FACTOR, RRD_ALGORITHM_ABSOLUTE);
1055
- rrddim_add(st, "used", NULL, system_pagesize, MEGA_FACTOR, RRD_ALGORITHM_ABSOLUTE);
1056
- }
1057
- else rrdset_next(st);
1058
-
1059
- rrddim_set(st, "used", total_xsw.bytes_used);
1060
- rrddim_set(st, "free", total_xsw.bytes_total - total_xsw.bytes_used);
1061
- rrdset_done(st);
1062
- }
1063
- }
1064
- }
1065
-
1066
- // --------------------------------------------------------------------
1067
-
1094
if (likely(do_ram)) {
1095
if (unlikely(GETSYSCTL_BY_NAME("vm.stats.vm.v_active_count", vmmeter_data.v_active_count) ||
1096
GETSYSCTL_BY_NAME("vm.stats.vm.v_inactive_count", vmmeter_data.v_inactive_count) ||
src/plugin_freebsd.c
+1
@@ -25,6 +25,7 @@ static struct freebsd_module {
25
{ .name = "vm.stats.sys.v_soft", .dim = "soft_intr", .enabled = 1, .func = do_vm_stats_sys_v_soft },
26
{ .name = "vm.stats.sys.v_swtch", .dim = "context_swtch", .enabled = 1, .func = do_vm_stats_sys_v_swtch },
27
{ .name = "vm.stats.vm.v_forks", .dim = "forks", .enabled = 1, .func = do_vm_stats_sys_v_forks },
28
+ { .name = "vm.swap_info", .dim = "swap", .enabled = 1, .func = do_vm_swap_info },
29
30
// the terminator of this array
31
{ .name = NULL, .dim = NULL, .enabled = 0, .func = NULL }
src/plugin_freebsd.h
+1
@@ -16,6 +16,7 @@ extern int do_vm_stats_sys_v_intr(int update_every, usec_t dt);
16
extern int do_vm_stats_sys_v_soft(int update_every, usec_t dt);
17
extern int do_vm_stats_sys_v_swtch(int update_every, usec_t dt);
18
extern int do_vm_stats_sys_v_forks(int update_every, usec_t dt);
19
+extern int do_vm_swap_info(int update_every, usec_t dt);
20
21
extern int do_freebsd_sysctl_old(int update_every, usec_t dt);
22