@cryptotaxi247 / netdata-1 / commits / 367505ab8

disk performance metrics can now be disabled per device major; disk statistics config options cleanup

Costa Tsaousis (ktsaou) committed Jan 2, 2017 at 14:26 UTC 367505ab88d13d272c0b6c4df3f5106931deed0a
1 file changed +32 -45
src/proc_diskstats.c
+32 -45
@@ -18,7 +18,6 @@ static struct disk {
18 int type;
19
20 char *mount_point;
21 - uint32_t mount_point_hash;
21
22 // disk options caching
23 int configured;
@@ -29,8 +28,6 @@ static struct disk {
28 int do_qops;
29 int do_util;
30 int do_backlog;
32 - int do_space;
33 - int do_inodes;
31
32 struct disk *next;
33 } *disk_root = NULL;
@@ -339,21 +336,10 @@ static struct disk *get_disk(unsigned long major, unsigned long minor, char *dis
336
337 // mountinfo_find() can be called with NULL disk_mountinfo_root
338 struct mountinfo *mi = mountinfo_find(disk_mountinfo_root, d->major, d->minor);
342 -/* if(unlikely(!mi)) {
343 - mountinfo_reload(1);
344 -
345 - // search again for this disk
346 - mi = mountinfo_find(disk_mountinfo_root, d->major, d->minor);
347 - }
348 -*/
349 - if(unlikely(mi)) {
339 + if(unlikely(mi))
340 d->mount_point = strdupz(mi->mount_point);
351 - d->mount_point_hash = mi->mount_point_hash;
352 - }
353 - else {
341 + else
342 d->mount_point = NULL;
355 - d->mount_point_hash = 0;
356 - }
343
344 // ------------------------------------------------------------------------
345 // find the disk sector size
@@ -411,6 +397,33 @@ static inline int select_positive_option(int option1, int option2) {
397 return CONFIG_ONDEMAND_NO;
398 }
399
400 +static inline int is_major_enabled(int major) {
401 + static char *major_configs = NULL;
402 + static size_t major_size = 0;
403 +
404 + if(major < 0) return 1;
405 +
406 + size_t wanted_size = (size_t)major + 1;
407 +
408 + if(major_size < wanted_size) {
409 + major_configs = reallocz(major_configs, wanted_size);
410 +
411 + size_t i;
412 + for(i = major_size; i < wanted_size ; i++)
413 + major_configs[i] = -1;
414 +
415 + major_size = wanted_size;
416 + }
417 +
418 + if(major_configs[major] == -1) {
419 + char buffer[CONFIG_MAX_NAME + 1];
420 + snprintfz(buffer, CONFIG_MAX_NAME, "performance metrics for disks with major %d", major);
421 + major_configs[major] = (char)config_get_boolean("plugin:proc:/proc/diskstats", buffer, 1);
422 + }
423 +
424 + return major_configs[major];
425 +}
426 +
427 int do_proc_diskstats(int update_every, usec_t dt) {
428 (void)dt;
429
@@ -419,8 +432,6 @@ int do_proc_diskstats(int update_every, usec_t dt) {
432 global_enable_performance_for_physical_disks = CONFIG_ONDEMAND_ONDEMAND,
433 global_enable_performance_for_virtual_disks = CONFIG_ONDEMAND_NO,
434 global_enable_performance_for_partitions = CONFIG_ONDEMAND_NO,
422 - global_enable_performance_for_mountpoints = CONFIG_ONDEMAND_NO,
423 - global_enable_performance_for_virtual_mountpoints = CONFIG_ONDEMAND_ONDEMAND,
435 global_do_io = CONFIG_ONDEMAND_ONDEMAND,
436 global_do_ops = CONFIG_ONDEMAND_ONDEMAND,
437 global_do_mops = CONFIG_ONDEMAND_ONDEMAND,
@@ -436,8 +447,6 @@ int do_proc_diskstats(int update_every, usec_t dt) {
447 global_enable_performance_for_physical_disks = config_get_boolean_ondemand("plugin:proc:/proc/diskstats", "performance metrics for physical disks", global_enable_performance_for_physical_disks);
448 global_enable_performance_for_virtual_disks = config_get_boolean_ondemand("plugin:proc:/proc/diskstats", "performance metrics for virtual disks", global_enable_performance_for_virtual_disks);
449 global_enable_performance_for_partitions = config_get_boolean_ondemand("plugin:proc:/proc/diskstats", "performance metrics for partitions", global_enable_performance_for_partitions);
439 - global_enable_performance_for_mountpoints = config_get_boolean_ondemand("plugin:proc:/proc/diskstats", "performance metrics for mounted filesystems", global_enable_performance_for_mountpoints);
440 - global_enable_performance_for_virtual_mountpoints = config_get_boolean_ondemand("plugin:proc:/proc/diskstats", "performance metrics for mounted virtual disks", global_enable_performance_for_virtual_mountpoints);
450
451 global_do_io = config_get_boolean_ondemand("plugin:proc:/proc/diskstats", "bandwidth for all disks", global_do_io);
452 global_do_ops = config_get_boolean_ondemand("plugin:proc:/proc/diskstats", "operations for all disks", global_do_ops);
@@ -579,15 +588,12 @@ int do_proc_diskstats(int update_every, usec_t dt) {
588 d->do_qops = CONFIG_ONDEMAND_NO;
589 d->do_util = CONFIG_ONDEMAND_NO;
590 d->do_backlog = CONFIG_ONDEMAND_NO;
582 - d->do_space = CONFIG_ONDEMAND_NO;
583 - d->do_inodes = CONFIG_ONDEMAND_NO;
591 }
592 else {
593 // this disk is enabled
594 // check its direct settings
595
596 int def_performance = CONFIG_ONDEMAND_ONDEMAND;
590 - int def_space = (d->mount_point)?CONFIG_ONDEMAND_ONDEMAND:CONFIG_ONDEMAND_NO;
597
598 // since this is 'on demand' we can figure the performance settings
599 // based on the type of disk
@@ -603,14 +609,12 @@ int do_proc_diskstats(int update_every, usec_t dt) {
609
610 case DISK_TYPE_CONTAINER:
611 def_performance = global_enable_performance_for_virtual_disks;
606 -
607 - if(d->mount_point)
608 - def_performance = select_positive_option(def_performance, global_enable_performance_for_virtual_mountpoints);
612 break;
613 }
614
612 - if(d->mount_point)
613 - def_performance = select_positive_option(def_performance, global_enable_performance_for_mountpoints);
615 + // check if we have to disable performance for this disk
616 + if(def_performance)
617 + def_performance = is_major_enabled((int)major);
618
619 // ------------------------------------------------------------
620 // now we have def_performance and def_space
@@ -646,23 +650,6 @@ int do_proc_diskstats(int update_every, usec_t dt) {
650 d->do_qops = config_get_boolean_ondemand(var_name, "queued operations", ddo_qops);
651 d->do_util = config_get_boolean_ondemand(var_name, "utilization percentage", ddo_util);
652 d->do_backlog = config_get_boolean_ondemand(var_name, "backlog", ddo_backlog);
649 -
650 - // def_space
651 - if(unlikely(d->mount_point)) {
652 - // check the user configuration (this will also show our 'on demand' decision)
653 - def_space = config_get_boolean_ondemand(var_name, "enable space metrics", def_space);
654 -
655 - int ddo_space = def_space,
656 - ddo_inodes = def_space;
657 -
658 - d->do_space = config_get_boolean_ondemand(var_name, "space usage", ddo_space);
659 - d->do_inodes = config_get_boolean_ondemand(var_name, "inodes usage", ddo_inodes);
660 - }
661 - else {
662 - // don't show settings for this disk
663 - d->do_space = CONFIG_ONDEMAND_NO;
664 - d->do_inodes = CONFIG_ONDEMAND_NO;
665 - }
653 }
654
655 d->configured = 1;