@cryptotaxi247 / netdata-1 / commits / 1c9120ad5

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 }