Separate vm.vmtotal module
Vladimir Kobal committed
Mar 7, 2017 at 00:40 UTC
44b40520a4c970d140bfc0f1644777f309b7bb5d
3 files changed
+151
-97
src/freebsd_sysctl.c
+148
-96
@@ -51,41 +51,160 @@ int freebsd_plugin_init()
51
52
int do_vm_loadavg(int update_every, usec_t dt){
53
static usec_t next_loadavg_dt = 0;
54
- static int mib[2] = {0,0};
55
- struct loadavg sysload;
56
- static RRDSET *st = NULL;
57
- static RRDDIM *rdload1 = NULL, *rdload2 = NULL, *rdload3 = NULL;
54
55
if (next_loadavg_dt <= dt) {
56
+ static int mib[2] = {0,0};
57
+ struct loadavg sysload;
58
+
59
if (unlikely(GETSYSCTL_SIMPLE("vm.loadavg", mib, sysload))) {
61
- error("DISABLED: system.load");
60
+ error("DISABLED: system.load chart");
61
+ error("DISABLED: vm.loadavg module");
62
return 1;
63
- } else if (unlikely(!st)) {
64
- st = rrdset_create_localhost("system",
65
- "load",
66
- NULL,
67
- "load",
68
- NULL,
69
- "System Load Average",
70
- "load",
71
- 100,
72
- (update_every < MIN_LOADAVG_UPDATE_EVERY) ?
73
- MIN_LOADAVG_UPDATE_EVERY : update_every, RRDSET_TYPE_LINE
74
- );
75
- rdload1 = rrddim_add(st, "load1", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
76
- rdload2 = rrddim_add(st, "load5", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
77
- rdload3 = rrddim_add(st, "load15", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
63
+ } else {
64
+ static RRDSET *st = NULL;
65
+ static RRDDIM *rd_load1 = NULL, *rd_load2 = NULL, *rd_load3 = NULL;
66
+
67
+ if (unlikely(!st)) {
68
+ st = rrdset_create_localhost("system",
69
+ "load",
70
+ NULL,
71
+ "load",
72
+ NULL,
73
+ "System Load Average",
74
+ "load",
75
+ 100,
76
+ (update_every < MIN_LOADAVG_UPDATE_EVERY) ?
77
+ MIN_LOADAVG_UPDATE_EVERY : update_every, RRDSET_TYPE_LINE
78
+ );
79
+ rd_load1 = rrddim_add(st, "load1", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
80
+ rd_load2 = rrddim_add(st, "load5", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
81
+ rd_load3 = rrddim_add(st, "load15", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
82
+ } else
83
+ rrdset_next(st);
84
+
85
+ rrddim_set_by_pointer(st, rd_load1, (collected_number) ((double) sysload.ldavg[0] / sysload.fscale * 1000));
86
+ rrddim_set_by_pointer(st, rd_load2, (collected_number) ((double) sysload.ldavg[1] / sysload.fscale * 1000));
87
+ rrddim_set_by_pointer(st, rd_load3, (collected_number) ((double) sysload.ldavg[2] / sysload.fscale * 1000));
88
+ rrdset_done(st);
89
+
90
+ next_loadavg_dt = st->update_every * USEC_PER_SEC;
91
}
79
- else rrdset_next(st);
92
+ }
93
+ else
94
+ next_loadavg_dt -= dt;
95
81
- rrddim_set_by_pointer(st, rdload1, (collected_number) ((double)sysload.ldavg[0] / sysload.fscale * 1000));
82
- rrddim_set_by_pointer(st, rdload2, (collected_number) ((double)sysload.ldavg[1] / sysload.fscale * 1000));
83
- rrddim_set_by_pointer(st, rdload3, (collected_number) ((double)sysload.ldavg[2] / sysload.fscale * 1000));
84
- rrdset_done(st);
96
+ return 0;
97
+}
98
+
99
+int do_vm_vmtotal(int update_every, usec_t dt) {
100
+ static int do_all_processes = -1, do_processes = -1, do_committed = -1;
101
+
102
+ if (unlikely(do_all_processes == -1)) {
103
+ do_all_processes = config_get_boolean("plugin:freebsd:vm.vmtotal", "enable total processes", 1);
104
+ do_processes = config_get_boolean("plugin:freebsd:vm.vmtotal", "processes running", 1);
105
+ do_committed = config_get_boolean("plugin:freebsd:vm.vmtotal", "committed memory", 1);
106
+ }
107
+
108
+ if (likely(do_all_processes | do_processes | do_committed)) {
109
+ static int mib[2] = {0, 0};
110
+ struct vmtotal vmtotal_data;
111
+
112
+ if (unlikely(GETSYSCTL_SIMPLE("vm.vmtotal", mib, vmtotal_data))) {
113
+ do_all_processes = 0;
114
+ error("DISABLED: system.active_processes chart");
115
+ do_processes = 0;
116
+ error("DISABLED: system.processes chart");
117
+ do_committed = 0;
118
+ error("DISABLED: mem.committed chart");
119
+ error("DISABLED: vm.vmtotal module");
120
+ return 1;
121
+ } else {
122
+ if (likely(do_all_processes)) {
123
+ static RRDSET *st = NULL;
124
+ static RRDDIM *rd = NULL;
125
+
126
+ if (unlikely(!st)) {
127
+ st = rrdset_create_localhost("system",
128
+ "active_processes",
129
+ NULL,
130
+ "processes",
131
+ NULL,
132
+ "System Active Processes",
133
+ "processes",
134
+ 750,
135
+ update_every,
136
+ RRDSET_TYPE_LINE
137
+ );
138
+ rd = rrddim_add(st, "active", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
139
+ }
140
+ else rrdset_next(st);
141
+
142
+ rrddim_set_by_pointer(st, rd, (vmtotal_data.t_rq + vmtotal_data.t_dw + vmtotal_data.t_pw + vmtotal_data.t_sl + vmtotal_data.t_sw));
143
+ rrdset_done(st);
144
+ }
145
+
146
+ // --------------------------------------------------------------------
147
+
148
+ if (likely(do_processes)) {
149
+ static RRDSET *st = NULL;
150
+ static RRDDIM *rd_running = NULL, *rd_blocked = NULL;
151
+
152
+ st = rrdset_find_bytype_localhost("system", "processes");
153
+ if (unlikely(!st)) {
154
+ st = rrdset_create_localhost("system",
155
+ "processes",
156
+ NULL,
157
+ "processes",
158
+ NULL,
159
+ "System Processes",
160
+ "processes",
161
+ 600,
162
+ update_every,
163
+ RRDSET_TYPE_LINE
164
+ );
165
+
166
+ rd_running = rrddim_add(st, "running", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
167
+ rd_blocked = rrddim_add(st, "blocked", NULL, -1, 1, RRD_ALGORITHM_ABSOLUTE);
168
+ }
169
+ else rrdset_next(st);
170
+
171
+ rrddim_set_by_pointer(st, rd_running, vmtotal_data.t_rq);
172
+ rrddim_set_by_pointer(st, rd_blocked, (vmtotal_data.t_dw + vmtotal_data.t_pw));
173
+ rrdset_done(st);
174
+ }
175
+
176
+ // --------------------------------------------------------------------
177
+
178
+ if (likely(do_committed)) {
179
+ static RRDSET *st = NULL;
180
+ static RRDDIM *rd = NULL;
181
+
182
+ if (unlikely(!st)) {
183
+ st = rrdset_create_localhost("mem",
184
+ "committed",
185
+ NULL,
186
+ "system",
187
+ NULL,
188
+ "Committed (Allocated) Memory",
189
+ "MB",
190
+ 5000,
191
+ update_every,
192
+ RRDSET_TYPE_AREA
193
+ );
194
+ rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
195
+
196
+ rd = rrddim_add(st, "Committed_AS", NULL, system_pagesize, MEGA_FACTOR, RRD_ALGORITHM_ABSOLUTE);
197
+ }
198
+ else rrdset_next(st);
199
86
- next_loadavg_dt = st->update_every * USEC_PER_SEC;
200
+ rrddim_set_by_pointer(st, rd, vmtotal_data.t_rm);
201
+ rrdset_done(st);
202
+ }
203
+ }
204
+ } else {
205
+ error("DISABLED: vm.vmtotal module");
206
+ return 1;
207
}
88
- else next_loadavg_dt -= dt;
208
209
return 0;
210
}
@@ -97,9 +216,8 @@ int do_vm_loadavg(int update_every, usec_t dt){
216
#define IFA_DATA(s) (((struct if_data *)ifa->ifa_data)->ifi_ ## s)
217
218
int do_freebsd_sysctl_old(int update_every, usec_t dt) {
100
- static int do_cpu = -1, do_cpu_cores = -1, do_interrupts = -1, do_context = -1, do_forks = -1, do_processes = -1,
101
- do_all_processes = -1, do_disk_io = -1, do_swap = -1, do_ram = -1, do_swapio = -1,
102
- do_pgfaults = -1, do_committed = -1, do_ipc_semaphores = -1, do_ipc_shared_mem = -1, do_ipc_msg_queues = -1,
219
+ static int do_cpu = -1, do_cpu_cores = -1, do_interrupts = -1, do_context = -1, do_forks = -1, do_disk_io = -1, do_swap = -1, do_ram = -1, do_swapio = -1,
220
+ do_pgfaults = -1, do_ipc_semaphores = -1, do_ipc_shared_mem = -1, do_ipc_msg_queues = -1,
221
do_dev_intr = -1, do_soft_intr = -1, do_netisr = -1, do_netisr_per_core = -1, do_bandwidth = -1,
222
do_tcp_sockets = -1, do_tcp_packets = -1, do_tcp_errors = -1, do_tcp_handshake = -1,
223
do_ecn = -1, do_tcpext_syscookies = -1, do_tcpext_ofo = -1, do_tcpext_connaborts = -1,
@@ -117,14 +235,11 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
235
do_soft_intr = config_get_boolean("plugin:freebsd:sysctl", "software interrupts", 1);
236
do_context = config_get_boolean("plugin:freebsd:sysctl", "context switches", 1);
237
do_forks = config_get_boolean("plugin:freebsd:sysctl", "processes started", 1);
120
- do_processes = config_get_boolean("plugin:freebsd:sysctl", "processes running", 1);
121
- do_all_processes = config_get_boolean("plugin:freebsd:sysctl", "enable total processes", 1);
238
do_disk_io = config_get_boolean("plugin:freebsd:sysctl", "stats for all disks", 1);
239
do_swap = config_get_boolean("plugin:freebsd:sysctl", "system swap", 1);
240
do_ram = config_get_boolean("plugin:freebsd:sysctl", "system ram", 1);
241
do_swapio = config_get_boolean("plugin:freebsd:sysctl", "swap i/o", 1);
242
do_pgfaults = config_get_boolean("plugin:freebsd:sysctl", "memory page faults", 1);
127
- do_committed = config_get_boolean("plugin:freebsd:sysctl", "committed memory", 1);
243
do_ipc_semaphores = config_get_boolean("plugin:freebsd:sysctl", "ipc semaphores", 1);
244
do_ipc_shared_mem = config_get_boolean("plugin:freebsd:sysctl", "ipc shared memory", 1);
245
do_ipc_msg_queues = config_get_boolean("plugin:freebsd:sysctl", "ipc message queues", 1);
@@ -182,9 +297,6 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
297
static long *pcpu_cp_time = NULL;
298
char cpuid[MAX_INT_DIGITS + 1];
299
185
- // NEEDED BY: do_all_processes, do_processes
186
- struct vmtotal vmtotal_data;
187
-
300
// NEEDED BY: do_context, do_forks
301
u_int u_int_data;
302
@@ -315,66 +427,6 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
427
428
// --------------------------------------------------------------------
429
318
- if (likely(do_all_processes | do_processes | do_committed)) {
319
- if (unlikely(GETSYSCTL_BY_NAME("vm.vmtotal", vmtotal_data))) {
320
- do_all_processes = 0;
321
- error("DISABLED: system.active_processes");
322
- do_processes = 0;
323
- error("DISABLED: system.processes");
324
- do_committed = 0;
325
- error("DISABLED: mem.committed");
326
- } else {
327
- if (likely(do_all_processes)) {
328
-
329
- st = rrdset_find_bytype_localhost("system", "active_processes");
330
- if (unlikely(!st)) {
331
- st = rrdset_create_localhost("system", "active_processes", NULL, "processes", NULL, "System Active Processes", "processes", 750, update_every, RRDSET_TYPE_LINE);
332
- rrddim_add(st, "active", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
333
- }
334
- else rrdset_next(st);
335
-
336
- rrddim_set(st, "active", (vmtotal_data.t_rq + vmtotal_data.t_dw + vmtotal_data.t_pw + vmtotal_data.t_sl + vmtotal_data.t_sw));
337
- rrdset_done(st);
338
- }
339
-
340
- // --------------------------------------------------------------------
341
-
342
- if (likely(do_processes)) {
343
-
344
- st = rrdset_find_bytype_localhost("system", "processes");
345
- if (unlikely(!st)) {
346
- st = rrdset_create_localhost("system", "processes", NULL, "processes", NULL, "System Processes", "processes", 600, update_every, RRDSET_TYPE_LINE);
347
-
348
- rrddim_add(st, "running", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
349
- rrddim_add(st, "blocked", NULL, -1, 1, RRD_ALGORITHM_ABSOLUTE);
350
- }
351
- else rrdset_next(st);
352
-
353
- rrddim_set(st, "running", vmtotal_data.t_rq);
354
- rrddim_set(st, "blocked", (vmtotal_data.t_dw + vmtotal_data.t_pw));
355
- rrdset_done(st);
356
- }
357
-
358
- // --------------------------------------------------------------------
359
-
360
- if (likely(do_committed)) {
361
- st = rrdset_find_localhost("mem.committed");
362
- if (unlikely(!st)) {
363
- st = rrdset_create_localhost("mem", "committed", NULL, "system", NULL, "Committed (Allocated) Memory", "MB", 5000, update_every, RRDSET_TYPE_AREA);
364
- rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
365
-
366
- rrddim_add(st, "Committed_AS", NULL, system_pagesize, MEGA_FACTOR, RRD_ALGORITHM_ABSOLUTE);
367
- }
368
- else rrdset_next(st);
369
-
370
- rrddim_set(st, "Committed_AS", vmtotal_data.t_rm);
371
- rrdset_done(st);
372
- }
373
- }
374
- }
375
-
376
- // --------------------------------------------------------------------
377
-
430
if (likely(do_cpu)) {
431
if (unlikely(CPUSTATES != 5)) {
432
error("FREEBSD: There are %d CPU states (5 was expected)", CPUSTATES);
src/plugin_freebsd.c
+2
-1
@@ -16,7 +16,8 @@ static struct freebsd_module {
16
{ .name = "freebsd_old", .dim = "freebsd_old", .enabled = 1, .func = do_freebsd_sysctl_old },
17
18
// system metrics
19
- { .name = "load average", .dim = "loadavg", .enabled = 1, .func = do_vm_loadavg },
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
22
// the terminator of this array
23
{ .name = NULL, .dim = NULL, .enabled = 0, .func = NULL }
src/plugin_freebsd.h
+1
@@ -8,6 +8,7 @@ void *freebsd_main(void *ptr);
8
extern int freebsd_plugin_init();
9
10
extern int do_vm_loadavg(int update_every, usec_t dt);
11
+extern int do_vm_vmtotal(int update_every, usec_t dt);
12
extern int do_freebsd_sysctl_old(int update_every, usec_t dt);
13
14
#define GETSYSCTL_MIB(name, mib) getsysctl_mib(name, mib, sizeof(mib)/sizeof(int))