Separate vm.stats.vm.v_pgfaults module
Vladimir Kobal committed
Mar 9, 2017 at 17:49 UTC
7e625be7f6413059fd7176785758f22dfface48e
3 files changed
+75
-57
src/freebsd_sysctl.c
+68
-56
@@ -729,23 +729,19 @@ int do_vm_swap_info(int update_every, usec_t dt) {
729
// system.ram
730
731
int do_system_ram(int update_every, usec_t dt) {
732
- static int mib_v_active_count[4] = {0, 0, 0, 0};
733
- static int mib_v_inactive_count[4] = {0, 0, 0, 0};
734
- static int mib_v_wire_count[4] = {0, 0, 0, 0};
735
- static int mib_v_cache_count[4] = {0, 0, 0, 0};
736
- static int mib_vfs_bufspace[2] = {0, 0};
737
- static int mib_v_free_count[4] = {0, 0, 0, 0};
732
+ static int mib_active_count[4] = {0, 0, 0, 0}, mib_inactive_count[4] = {0, 0, 0, 0}, mib_wire_count[4] = {0, 0, 0, 0},
733
+ mib_cache_count[4] = {0, 0, 0, 0}, mib_vfs_bufspace[2] = {0, 0}, mib_free_count[4] = {0, 0, 0, 0};
734
struct vmmeter vmmeter_data;
735
int vfs_bufspace_count;
736
741
- if (unlikely(GETSYSCTL_SIMPLE("vm.stats.vm.v_active_count", mib_v_active_count, vmmeter_data.v_active_count) ||
742
- GETSYSCTL_SIMPLE("vm.stats.vm.v_inactive_count", mib_v_inactive_count, vmmeter_data.v_inactive_count) ||
743
- GETSYSCTL_SIMPLE("vm.stats.vm.v_wire_count", mib_v_wire_count, vmmeter_data.v_wire_count) ||
737
+ if (unlikely(GETSYSCTL_SIMPLE("vm.stats.vm.v_active_count", mib_active_count, vmmeter_data.v_active_count) ||
738
+ GETSYSCTL_SIMPLE("vm.stats.vm.v_inactive_count", mib_inactive_count, vmmeter_data.v_inactive_count) ||
739
+ GETSYSCTL_SIMPLE("vm.stats.vm.v_wire_count", mib_wire_count, vmmeter_data.v_wire_count) ||
740
#if __FreeBSD_version < 1200016
745
- GETSYSCTL_SIMPLE("vm.stats.vm.v_cache_count", mib_v_cache_count, vmmeter_data.v_cache_count) ||
741
+ GETSYSCTL_SIMPLE("vm.stats.vm.v_cache_count", mib_cache_count, vmmeter_data.v_cache_count) ||
742
#endif
743
GETSYSCTL_SIMPLE("vfs.bufspace", mib_vfs_bufspace, vfs_bufspace_count) ||
748
- GETSYSCTL_SIMPLE("vm.stats.vm.v_free_count", mib_v_free_count, vmmeter_data.v_free_count))) {
744
+ GETSYSCTL_SIMPLE("vm.stats.vm.v_free_count", mib_free_count, vmmeter_data.v_free_count))) {
745
error("DISABLED: system.ram chart");
746
error("DISABLED: System.ram module");
747
return 1;
@@ -800,8 +796,7 @@ int do_system_ram(int update_every, usec_t dt) {
796
// vm.stats.vm.v_swappgs
797
798
int do_vm_stats_sys_v_swappgs(int update_every, usec_t dt) {
803
- static int mib_swappgsin[4] = {0, 0, 0, 0};
804
- static int mib_swappgsout[4] = {0, 0, 0, 0};
799
+ static int mib_swappgsin[4] = {0, 0, 0, 0}, mib_swappgsout[4] = {0, 0, 0, 0};
800
struct vmmeter vmmeter_data;
801
802
if (unlikely(GETSYSCTL_SIMPLE("vm.stats.vm.v_swappgsin", mib_swappgsin, vmmeter_data.v_swappgsin) ||
@@ -843,17 +838,69 @@ int do_vm_stats_sys_v_swappgs(int update_every, usec_t dt) {
838
}
839
840
// --------------------------------------------------------------------------------------------------------------------
846
-// old sources
841
+// vm.stats.vm.v_pgfaults
842
+
843
+int do_vm_stats_sys_v_pgfaults(int update_every, usec_t dt) {
844
+ static int mib_vm_faults[4] = {0, 0, 0, 0}, mib_io_faults[4] = {0, 0, 0, 0}, mib_cow_faults[4] = {0, 0, 0, 0},
845
+ mib_cow_optim[4] = {0, 0, 0, 0}, mib_intrans[4] = {0, 0, 0, 0};
846
+ struct vmmeter vmmeter_data;
847
848
-// NEEDED BY: do_disk_io
849
-#define RRD_TYPE_DISK "disk"
848
+ if (unlikely(GETSYSCTL_SIMPLE("vm.stats.vm.v_vm_faults", mib_vm_faults, vmmeter_data.v_vm_faults) ||
849
+ GETSYSCTL_SIMPLE("vm.stats.vm.v_io_faults", mib_io_faults, vmmeter_data.v_io_faults) ||
850
+ GETSYSCTL_SIMPLE("vm.stats.vm.v_cow_faults", mib_cow_faults, vmmeter_data.v_cow_faults) ||
851
+ GETSYSCTL_SIMPLE("vm.stats.vm.v_cow_optim", mib_cow_optim, vmmeter_data.v_cow_optim) ||
852
+ GETSYSCTL_SIMPLE("vm.stats.vm.v_intrans", mib_intrans, vmmeter_data.v_intrans))) {
853
+ error("DISABLED: mem.pgfaults chart");
854
+ error("DISABLED: vm.stats.vm.v_pgfaults module");
855
+ return 1;
856
+ } else {
857
851
-// NEEDED BY: do_bandwidth
852
-#define IFA_DATA(s) (((struct if_data *)ifa->ifa_data)->ifi_ ## s)
858
+ // --------------------------------------------------------------------
859
+
860
+ static RRDSET *st = NULL;
861
+ static RRDDIM *rd_memory = NULL, *rd_io_requiring = NULL, *rd_cow = NULL,
862
+ *rd_cow_optimized = NULL, *rd_in_transit = NULL;
863
+
864
+ if (unlikely(!st)) {
865
+ st = rrdset_create_localhost("mem",
866
+ "pgfaults",
867
+ NULL,
868
+ "system",
869
+ NULL,
870
+ "Memory Page Faults",
871
+ "page faults/s",
872
+ 500,
873
+ update_every,
874
+ RRDSET_TYPE_LINE
875
+ );
876
+
877
+ rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
878
+
879
+ rd_memory = rrddim_add(st, "memory", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
880
+ rd_io_requiring = rrddim_add(st, "io_requiring", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
881
+ rd_cow = rrddim_add(st, "cow", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
882
+ rd_cow_optimized = rrddim_add(st, "cow_optimized", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
883
+ rd_in_transit = rrddim_add(st, "in_transit", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
884
+ }
885
+ else rrdset_next(st);
886
+
887
+ rrddim_set_by_pointer(st, rd_memory, vmmeter_data.v_vm_faults);
888
+ rrddim_set_by_pointer(st, rd_io_requiring, vmmeter_data.v_io_faults);
889
+ rrddim_set_by_pointer(st, rd_cow, vmmeter_data.v_cow_faults);
890
+ rrddim_set_by_pointer(st, rd_cow_optimized, vmmeter_data.v_cow_optim);
891
+ rrddim_set_by_pointer(st, rd_in_transit, vmmeter_data.v_intrans);
892
+ rrdset_done(st);
893
+ }
894
+
895
+ return 0;
896
+}
897
+
898
+// --------------------------------------------------------------------------------------------------------------------
899
+// old sources
900
901
int do_freebsd_sysctl_old(int update_every, usec_t dt) {
902
static int do_disk_io = -1,
856
- do_pgfaults = -1, do_ipc_semaphores = -1, do_ipc_shared_mem = -1, do_ipc_msg_queues = -1,
903
+ do_ipc_semaphores = -1, do_ipc_shared_mem = -1, do_ipc_msg_queues = -1,
904
do_netisr = -1, do_netisr_per_core = -1, do_bandwidth = -1,
905
do_tcp_sockets = -1, do_tcp_packets = -1, do_tcp_errors = -1, do_tcp_handshake = -1,
906
do_ecn = -1, do_tcpext_syscookies = -1, do_tcpext_ofo = -1, do_tcpext_connaborts = -1,
@@ -865,7 +912,6 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
912
913
if (unlikely(do_uptime == -1)) {
914
do_disk_io = config_get_boolean("plugin:freebsd:sysctl", "stats for all disks", 1);
868
- do_pgfaults = config_get_boolean("plugin:freebsd:sysctl", "memory page faults", 1);
915
do_ipc_semaphores = config_get_boolean("plugin:freebsd:sysctl", "ipc semaphores", 1);
916
do_ipc_shared_mem = config_get_boolean("plugin:freebsd:sysctl", "ipc shared memory", 1);
917
do_ipc_msg_queues = config_get_boolean("plugin:freebsd:sysctl", "ipc message queues", 1);
@@ -914,10 +960,8 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
960
size_t size;
961
char title[4096 + 1];
962
917
- // NEEDED BY: do_context, do_forks
918
- u_int u_int_data;
919
-
963
// NEEDED BY: do_disk_io
964
+ #define RRD_TYPE_DISK "disk"
965
#define BINTIME_SCALE 5.42101086242752217003726400434970855712890625e-17 // this is 1000/2^64
966
int numdevs;
967
static void *devstat_data = NULL;
@@ -982,6 +1026,7 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
1026
char netstat_cpuid[21]; // no more than 4 digits expected
1027
1028
// NEEDED BY: do_bandwidth
1029
+ #define IFA_DATA(s) (((struct if_data *)ifa->ifa_data)->ifi_ ## s)
1030
struct ifaddrs *ifa, *ifap;
1031
struct iftot {
1032
u_long ift_ibytes;
@@ -1203,39 +1248,6 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
1248
1249
// --------------------------------------------------------------------
1250
1206
- if (likely(do_pgfaults)) {
1207
- if (unlikely(GETSYSCTL_BY_NAME("vm.stats.vm.v_vm_faults", vmmeter_data.v_vm_faults) ||
1208
- GETSYSCTL_BY_NAME("vm.stats.vm.v_io_faults", vmmeter_data.v_io_faults) ||
1209
- GETSYSCTL_BY_NAME("vm.stats.vm.v_cow_faults", vmmeter_data.v_cow_faults) ||
1210
- GETSYSCTL_BY_NAME("vm.stats.vm.v_cow_optim", vmmeter_data.v_cow_optim) ||
1211
- GETSYSCTL_BY_NAME("vm.stats.vm.v_intrans", vmmeter_data.v_intrans))) {
1212
- do_pgfaults = 0;
1213
- error("DISABLED: mem.pgfaults");
1214
- } else {
1215
- st = rrdset_find_localhost("mem.pgfaults");
1216
- if (unlikely(!st)) {
1217
- st = rrdset_create_localhost("mem", "pgfaults", NULL, "system", NULL, "Memory Page Faults", "page faults/s", 500, update_every, RRDSET_TYPE_LINE);
1218
- rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
1219
-
1220
- rrddim_add(st, "memory", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1221
- rrddim_add(st, "io_requiring", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1222
- rrddim_add(st, "cow", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1223
- rrddim_add(st, "cow_optimized", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1224
- rrddim_add(st, "in_transit", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1225
- }
1226
- else rrdset_next(st);
1227
-
1228
- rrddim_set(st, "memory", vmmeter_data.v_vm_faults);
1229
- rrddim_set(st, "io_requiring", vmmeter_data.v_io_faults);
1230
- rrddim_set(st, "cow", vmmeter_data.v_cow_faults);
1231
- rrddim_set(st, "cow_optimized", vmmeter_data.v_cow_optim);
1232
- rrddim_set(st, "in_transit", vmmeter_data.v_intrans);
1233
- rrdset_done(st);
1234
- }
1235
- }
1236
-
1237
- // --------------------------------------------------------------------
1238
-
1251
if (likely(do_ipc_semaphores)) {
1252
if (unlikely(GETSYSCTL_BY_NAME("kern.ipc.semmni", ipc_sem.semmni))) {
1253
do_ipc_semaphores = 0;
src/plugin_freebsd.c
+6
-1
@@ -19,7 +19,6 @@ static struct freebsd_module {
19
{ .name = "vm.loadavg", .dim = "loadavg", .enabled = 1, .func = do_vm_loadavg },
20
{ .name = "vm.vmtotal", .dim = "vmtotal", .enabled = 1, .func = do_vm_vmtotal },
21
{ .name = "kern.cp_time", .dim = "cp_time", .enabled = 1, .func = do_kern_cp_time },
22
- { .name = "kern.cp_times", .dim = "cp_times", .enabled = 1, .func = do_kern_cp_times },
22
{ .name = "hw.intrcnt", .dim = "hw_intr", .enabled = 1, .func = do_hw_intcnt },
23
{ .name = "vm.stats.sys.v_intr", .dim = "dev_intr", .enabled = 1, .func = do_vm_stats_sys_v_intr },
24
{ .name = "vm.stats.sys.v_soft", .dim = "soft_intr", .enabled = 1, .func = do_vm_stats_sys_v_soft },
@@ -29,6 +28,12 @@ static struct freebsd_module {
28
{ .name = "system.ram", .dim = "system_ram", .enabled = 1, .func = do_system_ram },
29
{ .name = "vm.stats.vm.v_swappgs", .dim = "swap_io", .enabled = 1, .func = do_vm_stats_sys_v_swappgs },
30
31
+ // CPU metrics
32
+ { .name = "kern.cp_times", .dim = "cp_times", .enabled = 1, .func = do_kern_cp_times },
33
+
34
+ // memory metrics
35
+ { .name = "vm.stats.vm.v_pgfaults", .dim = "pgfaults", .enabled = 1, .func = do_vm_stats_sys_v_pgfaults },
36
+
37
// the terminator of this array
38
{ .name = NULL, .dim = NULL, .enabled = 0, .func = NULL }
39
};
src/plugin_freebsd.h
+1
@@ -19,6 +19,7 @@ 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
extern int do_system_ram(int update_every, usec_t dt);
21
extern int do_vm_stats_sys_v_swappgs(int update_every, usec_t dt);
22
+extern int do_vm_stats_sys_v_pgfaults(int update_every, usec_t dt);
23
24
extern int do_freebsd_sysctl_old(int update_every, usec_t dt);
25