lower memory requirements: do not add disk charts for values not offered by kernel #38
Costa Tsaousis (ktsaou) committed
Dec 25, 2015 at 15:04 UTC
7cf7fa6e84007bbf5e159998d1c07457a7eccea4
1 file changed
+32
-13
src/proc_diskstats.c
+32
-13
@@ -115,6 +115,13 @@ int do_proc_diskstats(int update_every, unsigned long long dt) {
115
if(!reads && !writes && !busy_ms) continue;
116
117
int def_enabled = 0;
118
+ int ddo_io = do_io, ddo_ops = do_ops, ddo_mops = do_mops, ddo_iotime = do_iotime, ddo_qops = do_qops, ddo_util = do_util, ddo_backlog = do_backlog;
119
+
120
+ // by default, do not add charts that do not have values
121
+ if(mreads == 0 && mwrites == 0) ddo_mops = 0;
122
+ if(readms == 0 && writems == 0) ddo_iotime = 0;
123
+ if(busy_ms == 0) ddo_util = 0;
124
+ if(backlog_ms == 0) { ddo_backlog = 0; ddo_qops = 0; }
125
126
// remove slashes from disk names
127
char *s;
@@ -228,16 +235,28 @@ int do_proc_diskstats(int update_every, unsigned long long dt) {
235
else def_enabled = enable_new_disks;
236
break;
237
238
+ case 252: // zram
239
+ def_enabled = 0;
240
+ break;
241
+
242
default:
243
def_enabled = 0;
244
break;
245
}
246
236
- // check if it is enabled
247
+ // check which charts are enabled for this disk
248
{
249
char var_name[4096 + 1];
239
- snprintf(var_name, 4096, "disk %s", disk);
240
- if(!config_get_boolean("plugin:proc:/proc/diskstats", var_name, def_enabled)) continue;
250
+ snprintf(var_name, 4096, "plugin:proc:/proc/diskstats:%s", disk);
251
+ if(!config_get_boolean(var_name, "enabled", def_enabled)) continue;
252
+
253
+ ddo_io = config_get_boolean(var_name, "bandwidth", ddo_io);
254
+ ddo_ops = config_get_boolean(var_name, "operations", ddo_ops);
255
+ ddo_mops = config_get_boolean(var_name, "merged operations", ddo_mops);
256
+ ddo_iotime = config_get_boolean(var_name, "i/o time", ddo_iotime);
257
+ ddo_qops = config_get_boolean(var_name, "queued operations", ddo_qops);
258
+ ddo_util = config_get_boolean(var_name, "utilization percentage", ddo_util);
259
+ ddo_backlog = config_get_boolean(var_name, "backlog", ddo_backlog);
260
}
261
262
RRDSET *st;
@@ -245,7 +264,7 @@ int do_proc_diskstats(int update_every, unsigned long long dt) {
264
// --------------------------------------------------------------------
265
266
int sector_size = 512;
248
- if(do_io) {
267
+ if(ddo_io) {
268
st = rrdset_find_bytype(RRD_TYPE_DISK, disk);
269
if(!st) {
270
char tf[FILENAME_MAX + 1], *t;
@@ -290,7 +309,7 @@ int do_proc_diskstats(int update_every, unsigned long long dt) {
309
310
// --------------------------------------------------------------------
311
293
- if(do_ops) {
312
+ if(ddo_ops) {
313
st = rrdset_find_bytype("disk_ops", disk);
314
if(!st) {
315
st = rrdset_create("disk_ops", disk, NULL, disk, "Disk Completed I/O Operations", "operations/s", 2001, update_every, RRDSET_TYPE_LINE);
@@ -308,7 +327,7 @@ int do_proc_diskstats(int update_every, unsigned long long dt) {
327
328
// --------------------------------------------------------------------
329
311
- if(do_qops) {
330
+ if(ddo_qops) {
331
st = rrdset_find_bytype("disk_qops", disk);
332
if(!st) {
333
st = rrdset_create("disk_qops", disk, NULL, disk, "Disk Queued I/O Operations", "operations", 2002, update_every, RRDSET_TYPE_LINE);
@@ -324,7 +343,7 @@ int do_proc_diskstats(int update_every, unsigned long long dt) {
343
344
// --------------------------------------------------------------------
345
327
- if(do_backlog) {
346
+ if(ddo_backlog) {
347
st = rrdset_find_bytype("disk_backlog", disk);
348
if(!st) {
349
st = rrdset_create("disk_backlog", disk, NULL, disk, "Disk Backlog", "backlog (ms)", 2003, update_every, RRDSET_TYPE_AREA);
@@ -340,7 +359,7 @@ int do_proc_diskstats(int update_every, unsigned long long dt) {
359
360
// --------------------------------------------------------------------
361
343
- if(do_util) {
362
+ if(ddo_util) {
363
st = rrdset_find_bytype("disk_util", disk);
364
if(!st) {
365
st = rrdset_create("disk_util", disk, NULL, disk, "Disk Utilization Time", "% of time working", 2004, update_every, RRDSET_TYPE_AREA);
@@ -356,7 +375,7 @@ int do_proc_diskstats(int update_every, unsigned long long dt) {
375
376
// --------------------------------------------------------------------
377
359
- if(do_mops) {
378
+ if(ddo_mops) {
379
st = rrdset_find_bytype("disk_mops", disk);
380
if(!st) {
381
st = rrdset_create("disk_mops", disk, NULL, disk, "Disk Merged Operations", "merged operations/s", 2021, update_every, RRDSET_TYPE_LINE);
@@ -374,7 +393,7 @@ int do_proc_diskstats(int update_every, unsigned long long dt) {
393
394
// --------------------------------------------------------------------
395
377
- if(do_iotime) {
396
+ if(ddo_iotime) {
397
st = rrdset_find_bytype("disk_iotime", disk);
398
if(!st) {
399
st = rrdset_create("disk_iotime", disk, NULL, disk, "Disk Total I/O Time", "milliseconds/s", 2022, update_every, RRDSET_TYPE_LINE);
@@ -395,7 +414,7 @@ int do_proc_diskstats(int update_every, unsigned long long dt) {
414
// only if this is not the first time we run
415
416
if(dt) {
398
- if(do_iotime && do_ops) {
417
+ if(ddo_iotime && ddo_ops) {
418
st = rrdset_find_bytype("disk_await", disk);
419
if(!st) {
420
st = rrdset_create("disk_await", disk, NULL, disk, "Average Completed I/O Operation Time", "ms per operation", 2005, update_every, RRDSET_TYPE_LINE);
@@ -411,7 +430,7 @@ int do_proc_diskstats(int update_every, unsigned long long dt) {
430
rrdset_done(st);
431
}
432
414
- if(do_io && do_ops) {
433
+ if(ddo_io && ddo_ops) {
434
st = rrdset_find_bytype("disk_avgsz", disk);
435
if(!st) {
436
st = rrdset_create("disk_avgsz", disk, NULL, disk, "Average Completed I/O Operation Bandwidth", "kilobytes per operation", 2006, update_every, RRDSET_TYPE_AREA);
@@ -427,7 +446,7 @@ int do_proc_diskstats(int update_every, unsigned long long dt) {
446
rrdset_done(st);
447
}
448
430
- if(do_util && do_ops) {
449
+ if(ddo_util && ddo_ops) {
450
st = rrdset_find_bytype("disk_svctm", disk);
451
if(!st) {
452
st = rrdset_create("disk_svctm", disk, NULL, disk, "Average Service Time", "ms per operation", 2007, update_every, RRDSET_TYPE_LINE);