@cryptotaxi247 / netdata-1 / commits / cce7ad6e6

calculate total system disk I/O by aggregating the I/O of all physical disks; fixes #2877

Costa Tsaousis (ktsaou) committed Oct 25, 2017 at 23:18 UTC cce7ad6e6dd4a8affd95f0a51941fbc0c153b5e7
2 files changed +46 -3
src/proc_diskstats.c
+43
@@ -348,6 +348,8 @@ int do_proc_diskstats(int update_every, usec_t dt) {
348
349 size_t lines = procfile_lines(ff), l;
350
351 + collected_number system_read_kb = 0, system_write_kb = 0;
352 +
353 for(l = 0; l < lines ;l++) {
354 // --------------------------------------------------------------------------
355 // Read parameters
@@ -423,6 +425,11 @@ int do_proc_diskstats(int update_every, usec_t dt) {
425 struct disk *d = get_disk(major, minor, disk);
426 d->updated = 1;
427
428 + if(unlikely(d->type == DISK_TYPE_PHYSICAL)) {
429 + system_read_kb += readsectors * d->sector_size / 1024;
430 + system_write_kb += writesectors * d->sector_size / 1024;
431 + }
432 +
433 // --------------------------------------------------------------------------
434 // Set its family based on mount point
435
@@ -850,6 +857,42 @@ int do_proc_diskstats(int update_every, usec_t dt) {
857 }
858 }
859
860 +
861 + // ------------------------------------------------------------------------
862 + // update the system total I/O
863 +
864 + if(global_do_io == CONFIG_BOOLEAN_YES || (global_do_io == CONFIG_BOOLEAN_AUTO && (system_read_kb || system_write_kb))) {
865 + static RRDSET *st_io = NULL;
866 + static RRDDIM *rd_in = NULL, *rd_out = NULL;
867 +
868 + if(unlikely(!st_io)) {
869 + st_io = rrdset_create_localhost(
870 + "system"
871 + , "io"
872 + , NULL
873 + , "disk"
874 + , NULL
875 + , "Disk I/O"
876 + , "kilobytes/s"
877 + , "proc"
878 + , "diskstats"
879 + , 150
880 + , update_every
881 + , RRDSET_TYPE_AREA
882 + );
883 +
884 + rd_in = rrddim_add(st_io, "in", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
885 + rd_out = rrddim_add(st_io, "out", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
886 + }
887 + else rrdset_next(st_io);
888 +
889 + rrddim_set_by_pointer(st_io, rd_in, system_read_kb);
890 + rrddim_set_by_pointer(st_io, rd_out, system_write_kb);
891 + rrdset_done(st_io);
892 + }
893 +
894 +
895 + // ------------------------------------------------------------------------
896 // cleanup removed disks
897
898 struct disk *d = disk_root, *last = NULL;
src/proc_vmstat.c
+3 -3
@@ -128,15 +128,15 @@ int do_proc_vmstat(int update_every, usec_t dt) {
128 if(unlikely(!st_io)) {
129 st_io = rrdset_create_localhost(
130 "system"
131 - , "io"
131 + , "pgpgio"
132 , NULL
133 , "disk"
134 , NULL
135 - , "Disk I/O"
135 + , "Memory Paged from/to disk"
136 , "kilobytes/s"
137 , "proc"
138 , "vmstat"
139 - , 150
139 + , 151
140 , update_every
141 , RRDSET_TYPE_AREA
142 );