@cryptotaxi247 / netdata-1 / commits / 7cf7fa6e8

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);