Add RAM, swap I/O and faults charts to macOS plugin
Vladimir Kobal committed
Dec 27, 2016 at 13:04 UTC
1c9120ad58a98ece1281edf3249d04df9d383f3d
2 files changed
+126
-18
src/freebsd_sysctl.c
+8
-8
@@ -702,19 +702,19 @@ int do_freebsd_sysctl(int update_every, usec_t dt) {
702
GETSYSCTL("vm.stats.vm.v_cache_count", vmmeter_data.v_cache_count) ||
703
GETSYSCTL("vfs.bufspace", vfs_bufspace_count) ||
704
GETSYSCTL("vm.stats.vm.v_free_count", vmmeter_data.v_free_count))) {
705
- do_swapio = 0;
706
- error("DISABLED: system.swapio");
705
+ do_ram = 0;
706
+ error("DISABLED: system.ram");
707
} else {
708
st = rrdset_find("system.ram");
709
if (unlikely(!st)) {
710
st = rrdset_create("system", "ram", NULL, "ram", NULL, "System RAM", "MB", 200, update_every, RRDSET_TYPE_STACKED);
711
712
- rrddim_add(st, "active", NULL, system_pagesize, 1024, RRDDIM_ABSOLUTE);
713
- rrddim_add(st, "inactive", NULL, system_pagesize, 1024, RRDDIM_ABSOLUTE);
714
- rrddim_add(st, "wired", NULL, system_pagesize, 1024, RRDDIM_ABSOLUTE);
715
- rrddim_add(st, "cache", NULL, system_pagesize, 1024, RRDDIM_ABSOLUTE);
716
- rrddim_add(st, "buffers", NULL, 1, 1024, RRDDIM_ABSOLUTE);
717
- rrddim_add(st, "free", NULL, system_pagesize, 1024, RRDDIM_ABSOLUTE);
712
+ rrddim_add(st, "active", NULL, system_pagesize, 1048576, RRDDIM_ABSOLUTE);
713
+ rrddim_add(st, "inactive", NULL, system_pagesize, 1048576, RRDDIM_ABSOLUTE);
714
+ rrddim_add(st, "wired", NULL, system_pagesize, 1048576, RRDDIM_ABSOLUTE);
715
+ rrddim_add(st, "cache", NULL, system_pagesize, 1048576, RRDDIM_ABSOLUTE);
716
+ rrddim_add(st, "buffers", NULL, 1, 1048576, RRDDIM_ABSOLUTE);
717
+ rrddim_add(st, "free", NULL, system_pagesize, 1048576, RRDDIM_ABSOLUTE);
718
}
719
else rrdset_next(st);
720
src/macos_mach_smi.c
+118
-10
@@ -1,21 +1,36 @@
1
#include "common.h"
2
-#include <mach/mach_host.h>
2
+#include <mach/mach.h>
3
4
int do_macos_mach_smi(int update_every, usec_t dt) {
5
(void)dt;
6
7
- static int do_cpu = -1;
7
+ static int do_cpu = -1, do_ram = - 1, do_swapio = -1, do_pgfaults = -1;
8
9
if (unlikely(do_cpu == -1)) {
10
do_cpu = config_get_boolean("plugin:macos:mach_smi", "cpu utilization", 1);
11
+ do_ram = config_get_boolean("plugin:macos:mach_smi", "system ram", 1);
12
+ do_swapio = config_get_boolean("plugin:macos:mach_smi", "swap i/o", 1);
13
+ do_pgfaults = config_get_boolean("plugin:macos:mach_smi", "memory page faults", 1);
14
}
15
16
RRDSET *st;
17
15
- // NEEDED BY: do_cpu, do_cpu_cores
16
- natural_t cp_time[CPU_STATE_MAX];
18
kern_return_t kr;
19
mach_msg_type_number_t count;
20
+ host_t host;
21
+ vm_size_t system_pagesize;
22
+
23
+
24
+ // NEEDED BY: do_cpu
25
+ natural_t cp_time[CPU_STATE_MAX];
26
+
27
+ // NEEDED BY: do_ram, do_swapio, do_pgfaults
28
+ vm_statistics64_data_t vm_statistics;
29
+
30
+ host = mach_host_self();
31
+ kr = host_page_size(host, &system_pagesize);
32
+ if (unlikely(kr != KERN_SUCCESS))
33
+ return -1;
34
35
// --------------------------------------------------------------------
36
@@ -26,12 +41,11 @@ int do_macos_mach_smi(int update_every, usec_t dt) {
41
error("DISABLED: system.cpu");
42
} else {
43
count = HOST_CPU_LOAD_INFO_COUNT;
29
- if (unlikely(kr = host_statistics(mach_host_self(), HOST_CPU_LOAD_INFO, (host_info_t)cp_time, &count))) {
30
- if (kr != KERN_SUCCESS) {
31
- error("MACOS: host_statistics() failed: %s", mach_error_string(kr));
32
- do_cpu = 0;
33
- error("DISABLED: system.cpu");
34
- }
44
+ kr = host_statistics(host, HOST_CPU_LOAD_INFO, (host_info_t)cp_time, &count);
45
+ if (unlikely(kr != KERN_SUCCESS)) {
46
+ error("MACOS: host_statistics() failed: %s", mach_error_string(kr));
47
+ do_cpu = 0;
48
+ error("DISABLED: system.cpu");
49
} else {
50
51
st = rrdset_find_bytype("system", "cpu");
@@ -55,5 +69,99 @@ int do_macos_mach_smi(int update_every, usec_t dt) {
69
}
70
}
71
72
+ // --------------------------------------------------------------------
73
+
74
+ if (likely(do_ram || do_swapio || do_pgfaults)) {
75
+ count = sizeof(vm_statistics64_data_t);
76
+ kr = host_statistics64(host, HOST_VM_INFO64, (host_info64_t)&vm_statistics, &count);
77
+ if (unlikely(kr != KERN_SUCCESS)) {
78
+ error("MACOS: host_statistics64() failed: %s", mach_error_string(kr));
79
+ do_ram = 0;
80
+ error("DISABLED: system.ram");
81
+ do_swapio = 0;
82
+ error("DISABLED: system.swapio");
83
+ do_pgfaults = 0;
84
+ error("DISABLED: mem.pgfaults");
85
+ } else {
86
+ if (likely(do_ram)) {
87
+ st = rrdset_find("system.ram");
88
+ if (unlikely(!st)) {
89
+ st = rrdset_create("system", "ram", NULL, "ram", NULL, "System RAM", "MB", 200, update_every, RRDSET_TYPE_STACKED);
90
+
91
+ rrddim_add(st, "active", NULL, system_pagesize, 1048576, RRDDIM_ABSOLUTE);
92
+ rrddim_add(st, "wired", NULL, system_pagesize, 1048576, RRDDIM_ABSOLUTE);
93
+ rrddim_add(st, "throttled", NULL, system_pagesize, 1048576, RRDDIM_ABSOLUTE);
94
+ rrddim_add(st, "compressor", NULL, system_pagesize, 1048576, RRDDIM_ABSOLUTE);
95
+ rrddim_add(st, "inactive", NULL, system_pagesize, 1048576, RRDDIM_ABSOLUTE);
96
+ rrddim_add(st, "speculative", NULL, system_pagesize, 1048576, RRDDIM_ABSOLUTE);
97
+ rrddim_add(st, "purgeable", NULL, system_pagesize, 1048576, RRDDIM_ABSOLUTE);
98
+ rrddim_add(st, "free", NULL, system_pagesize, 1048576, RRDDIM_ABSOLUTE);
99
+ }
100
+ else rrdset_next(st);
101
+
102
+ rrddim_set(st, "active", vm_statistics.active_count);
103
+ rrddim_set(st, "wired", vm_statistics.wire_count);
104
+ rrddim_set(st, "throttled", vm_statistics.throttled_count);
105
+ rrddim_set(st, "compressor", vm_statistics.compressor_page_count);
106
+ rrddim_set(st, "inactive", vm_statistics.inactive_count);
107
+ rrddim_set(st, "speculative", vm_statistics.speculative_count);
108
+ rrddim_set(st, "purgeable", vm_statistics.purgeable_count);
109
+ rrddim_set(st, "free", vm_statistics.free_count);
110
+ rrdset_done(st);
111
+ }
112
+
113
+ // --------------------------------------------------------------------
114
+
115
+ if (likely(do_swapio)) {
116
+ st = rrdset_find("system.swapio");
117
+ if (unlikely(!st)) {
118
+ st = rrdset_create("system", "swapio", NULL, "swap", NULL, "Swap I/O", "kilobytes/s", 250, update_every, RRDSET_TYPE_AREA);
119
+
120
+ rrddim_add(st, "in", NULL, system_pagesize, 1024, RRDDIM_INCREMENTAL);
121
+ rrddim_add(st, "out", NULL, -system_pagesize, 1024, RRDDIM_INCREMENTAL);
122
+ }
123
+ else rrdset_next(st);
124
+
125
+ rrddim_set(st, "in", vm_statistics.swapins);
126
+ rrddim_set(st, "out", vm_statistics.swapouts);
127
+ rrdset_done(st);
128
+ }
129
+
130
+ // --------------------------------------------------------------------
131
+
132
+ if (likely(do_pgfaults)) {
133
+ st = rrdset_find("mem.pgfaults");
134
+ if (unlikely(!st)) {
135
+ st = rrdset_create("mem", "pgfaults", NULL, "system", NULL, "Memory Page Faults", "page faults/s", 500, update_every, RRDSET_TYPE_LINE);
136
+ st->isdetail = 1;
137
+
138
+ rrddim_add(st, "memory", NULL, 1, 1, RRDDIM_INCREMENTAL);
139
+ rrddim_add(st, "cow", NULL, 1, 1, RRDDIM_INCREMENTAL);
140
+ rrddim_add(st, "pagein", NULL, 1, 1, RRDDIM_INCREMENTAL);
141
+ rrddim_add(st, "pageout", NULL, 1, 1, RRDDIM_INCREMENTAL);
142
+ rrddim_add(st, "compress", NULL, 1, 1, RRDDIM_INCREMENTAL);
143
+ rrddim_add(st, "decompress", NULL, 1, 1, RRDDIM_INCREMENTAL);
144
+ rrddim_add(st, "zero_fill", NULL, 1, 1, RRDDIM_INCREMENTAL);
145
+ rrddim_add(st, "reactivate", NULL, 1, 1, RRDDIM_INCREMENTAL);
146
+ rrddim_add(st, "purge", NULL, 1, 1, RRDDIM_INCREMENTAL);
147
+ }
148
+ else rrdset_next(st);
149
+
150
+ rrddim_set(st, "memory", vm_statistics.faults);
151
+ rrddim_set(st, "cow", vm_statistics.cow_faults);
152
+ rrddim_set(st, "pagein", vm_statistics.pageins);
153
+ rrddim_set(st, "pageout", vm_statistics.pageouts);
154
+ rrddim_set(st, "compress", vm_statistics.compressions);
155
+ rrddim_set(st, "decompress", vm_statistics.decompressions);
156
+ rrddim_set(st, "zero_fill", vm_statistics.zero_fill_count);
157
+ rrddim_set(st, "reactivate", vm_statistics.reactivations);
158
+ rrddim_set(st, "purge", vm_statistics.purges);
159
+ rrdset_done(st);
160
+ }
161
+ }
162
+ }
163
+
164
+ // --------------------------------------------------------------------
165
+
166
return 0;
167
}