@cryptotaxi247 / netdata-1 / commits / 806b2294c

added hit ratio chart

Costa Tsaousis (ktsaou) committed Mar 5, 2018 at 19:12 UTC 806b2294c502fea85522834c2442ce9b8c1a4a59
1 file changed +125 -39
src/proc_diskstats.c
+125 -39
@@ -34,11 +34,14 @@ static struct disk {
34
35 int device_is_bcache;
36
37 - char *bcache_filename_cache_congested;
37 char *bcache_filename_dirty_data;
38 char *bcache_filename_writeback_rate;
40 -
41 - char *bcache_filename_stats_total_cache_available_percent;
39 + char *bcache_filename_cache_congested;
40 + char *bcache_filename_cache_available_percent;
41 + char *bcache_filename_stats_five_minute_cache_hit_ratio;
42 + char *bcache_filename_stats_hour_cache_hit_ratio;
43 + char *bcache_filename_stats_day_cache_hit_ratio;
44 + char *bcache_filename_stats_total_cache_hit_ratio;
45 char *bcache_filename_stats_total_cache_hits;
46 char *bcache_filename_stats_total_cache_misses;
47 char *bcache_filename_stats_total_cache_miss_collisions;
@@ -88,6 +91,12 @@ static struct disk {
91 RRDSET *st_bcache_usage;
92 RRDDIM *rd_bcache_available_percent;
93
94 + RRDSET *st_bcache_hit_ratio;
95 + RRDDIM *rd_bcache_hit_ratio_5min;
96 + RRDDIM *rd_bcache_hit_ratio_1hour;
97 + RRDDIM *rd_bcache_hit_ratio_1day;
98 + RRDDIM *rd_bcache_hit_ratio_total;
99 +
100 RRDSET *st_bcache;
101 RRDDIM *rd_bcache_hits;
102 RRDDIM *rd_bcache_misses;
@@ -537,7 +546,7 @@ static struct disk *get_disk(unsigned long major, unsigned long minor, char *dis
546
547 snprintfz(buffer2, FILENAME_MAX, "%s/cache/cache_available_percent", buffer);
548 if(access(buffer2, R_OK) == 0)
540 - d->bcache_filename_stats_total_cache_available_percent = strdupz(buffer2);
549 + d->bcache_filename_cache_available_percent = strdupz(buffer2);
550 else
551 error("bcache file '%s' cannot be read.", buffer2);
552
@@ -547,6 +556,30 @@ static struct disk *get_disk(unsigned long major, unsigned long minor, char *dis
556 else
557 error("bcache file '%s' cannot be read.", buffer2);
558
559 + snprintfz(buffer2, FILENAME_MAX, "%s/stats_five_minute/cache_hit_ratio", buffer);
560 + if(access(buffer2, R_OK) == 0)
561 + d->bcache_filename_stats_five_minute_cache_hit_ratio = strdupz(buffer2);
562 + else
563 + error("bcache file '%s' cannot be read.", buffer2);
564 +
565 + snprintfz(buffer2, FILENAME_MAX, "%s/stats_hour/cache_hit_ratio", buffer);
566 + if(access(buffer2, R_OK) == 0)
567 + d->bcache_filename_stats_hour_cache_hit_ratio = strdupz(buffer2);
568 + else
569 + error("bcache file '%s' cannot be read.", buffer2);
570 +
571 + snprintfz(buffer2, FILENAME_MAX, "%s/stats_day/cache_hit_ratio", buffer);
572 + if(access(buffer2, R_OK) == 0)
573 + d->bcache_filename_stats_day_cache_hit_ratio = strdupz(buffer2);
574 + else
575 + error("bcache file '%s' cannot be read.", buffer2);
576 +
577 + snprintfz(buffer2, FILENAME_MAX, "%s/stats_total/cache_hit_ratio", buffer);
578 + if(access(buffer2, R_OK) == 0)
579 + d->bcache_filename_stats_total_cache_hit_ratio = strdupz(buffer2);
580 + else
581 + error("bcache file '%s' cannot be read.", buffer2);
582 +
583 snprintfz(buffer2, FILENAME_MAX, "%s/stats_total/cache_misses", buffer);
584 if(access(buffer2, R_OK) == 0)
585 d->bcache_filename_stats_total_cache_misses = strdupz(buffer2);
@@ -1068,52 +1101,100 @@ int do_proc_diskstats(int update_every, usec_t dt) {
1101
1102 if(d->device_is_bcache && d->do_bcache != CONFIG_BOOLEAN_NO) {
1103 unsigned long long int
1071 - cache_bypass_hits = 0,
1072 - cache_bypass_misses = 0,
1073 - cache_hits = 0,
1074 - cache_miss_collisions = 0,
1075 - cache_misses = 0,
1104 + stats_total_cache_bypass_hits = 0,
1105 + stats_total_cache_bypass_misses = 0,
1106 + stats_total_cache_hits = 0,
1107 + stats_total_cache_miss_collisions = 0,
1108 + stats_total_cache_misses = 0,
1109 + stats_five_minute_cache_hit_ratio = 0,
1110 + stats_hour_cache_hit_ratio = 0,
1111 + stats_day_cache_hit_ratio = 0,
1112 + stats_total_cache_hit_ratio = 0,
1113 cache_available_percent = 0,
1114 cache_readaheads = 0,
1078 - congested = 0,
1115 + cache_congested = 0,
1116 dirty_data = 0,
1117 writeback_rate = 0;
1118
1119 // read the bcache values
1120
1084 - if(d->bcache_filename_cache_congested)
1085 - congested = bcache_read_number_with_units(d->bcache_filename_cache_congested);
1086 -
1087 - if(d->bcache_filename_stats_total_cache_readaheads)
1088 - cache_readaheads = bcache_read_number_with_units(d->bcache_filename_stats_total_cache_readaheads);
1089 -
1121 if(d->bcache_filename_dirty_data)
1122 dirty_data = bcache_read_number_with_units(d->bcache_filename_dirty_data);
1123
1124 if(d->bcache_filename_writeback_rate)
1125 writeback_rate = bcache_read_number_with_units(d->bcache_filename_writeback_rate);
1126
1096 - if(d->bcache_filename_stats_total_cache_available_percent)
1097 - read_single_number_file(d->bcache_filename_stats_total_cache_available_percent, &cache_available_percent);
1127 + if(d->bcache_filename_cache_congested)
1128 + cache_congested = bcache_read_number_with_units(d->bcache_filename_cache_congested);
1129 +
1130 + if(d->bcache_filename_cache_available_percent)
1131 + read_single_number_file(d->bcache_filename_cache_available_percent, &cache_available_percent);
1132 +
1133 + if(d->bcache_filename_stats_five_minute_cache_hit_ratio)
1134 + read_single_number_file(d->bcache_filename_stats_five_minute_cache_hit_ratio, &stats_five_minute_cache_hit_ratio);
1135 +
1136 + if(d->bcache_filename_stats_hour_cache_hit_ratio)
1137 + read_single_number_file(d->bcache_filename_stats_hour_cache_hit_ratio, &stats_hour_cache_hit_ratio);
1138 +
1139 + if(d->bcache_filename_stats_day_cache_hit_ratio)
1140 + read_single_number_file(d->bcache_filename_stats_day_cache_hit_ratio, &stats_day_cache_hit_ratio);
1141 +
1142 + if(d->bcache_filename_stats_total_cache_hit_ratio)
1143 + read_single_number_file(d->bcache_filename_stats_total_cache_hit_ratio, &stats_total_cache_hit_ratio);
1144
1145 if(d->bcache_filename_stats_total_cache_hits)
1100 - read_single_number_file(d->bcache_filename_stats_total_cache_hits, &cache_hits);
1146 + read_single_number_file(d->bcache_filename_stats_total_cache_hits, &stats_total_cache_hits);
1147
1148 if(d->bcache_filename_stats_total_cache_misses)
1103 - read_single_number_file(d->bcache_filename_stats_total_cache_misses, &cache_misses);
1149 + read_single_number_file(d->bcache_filename_stats_total_cache_misses, &stats_total_cache_misses);
1150
1151 if(d->bcache_filename_stats_total_cache_miss_collisions)
1106 - read_single_number_file(d->bcache_filename_stats_total_cache_miss_collisions, &cache_miss_collisions);
1152 + read_single_number_file(d->bcache_filename_stats_total_cache_miss_collisions, &stats_total_cache_miss_collisions);
1153
1154 if(d->bcache_filename_stats_total_cache_bypass_hits)
1109 - read_single_number_file(d->bcache_filename_stats_total_cache_bypass_hits, &cache_bypass_hits);
1155 + read_single_number_file(d->bcache_filename_stats_total_cache_bypass_hits, &stats_total_cache_bypass_hits);
1156
1157 if(d->bcache_filename_stats_total_cache_bypass_misses)
1112 - read_single_number_file(d->bcache_filename_stats_total_cache_bypass_misses, &cache_bypass_misses);
1158 + read_single_number_file(d->bcache_filename_stats_total_cache_bypass_misses, &stats_total_cache_bypass_misses);
1159 +
1160 + if(d->bcache_filename_stats_total_cache_readaheads)
1161 + cache_readaheads = bcache_read_number_with_units(d->bcache_filename_stats_total_cache_readaheads);
1162
1163
1164 // update the charts
1165
1166 + {
1167 +
1168 + if(unlikely(!d->st_bcache_hit_ratio)) {
1169 + d->st_bcache_hit_ratio = rrdset_create_localhost(
1170 + "disk_bcache_hit_ratio"
1171 + , d->device
1172 + , d->disk
1173 + , family
1174 + , "disk.bcache_hit_ratio"
1175 + , "Block Cache I/O Hit Ratio"
1176 + , "percentage"
1177 + , "proc"
1178 + , "diskstats"
1179 + , 2120
1180 + , update_every
1181 + , RRDSET_TYPE_LINE
1182 + );
1183 +
1184 + d->rd_bcache_hit_ratio_5min = rrddim_add(d->st_bcache_hit_ratio, "5min", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
1185 + d->rd_bcache_hit_ratio_1hour = rrddim_add(d->st_bcache_hit_ratio, "1hour", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
1186 + d->rd_bcache_hit_ratio_1day = rrddim_add(d->st_bcache_hit_ratio, "1day", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
1187 + d->rd_bcache_hit_ratio_total = rrddim_add(d->st_bcache_hit_ratio, "ever", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
1188 + }
1189 + else rrdset_next(d->st_bcache_hit_ratio);
1190 +
1191 + rrddim_set_by_pointer(d->st_bcache_hit_ratio, d->rd_bcache_hit_ratio_5min, stats_five_minute_cache_hit_ratio);
1192 + rrddim_set_by_pointer(d->st_bcache_hit_ratio, d->rd_bcache_hit_ratio_1hour, stats_hour_cache_hit_ratio);
1193 + rrddim_set_by_pointer(d->st_bcache_hit_ratio, d->rd_bcache_hit_ratio_1day, stats_day_cache_hit_ratio);
1194 + rrddim_set_by_pointer(d->st_bcache_hit_ratio, d->rd_bcache_hit_ratio_total, stats_total_cache_hit_ratio);
1195 + rrdset_done(d->st_bcache_hit_ratio);
1196 + }
1197 +
1198 {
1199
1200 if(unlikely(!d->st_bcache_rates)) {
@@ -1127,7 +1208,7 @@ int do_proc_diskstats(int update_every, usec_t dt) {
1208 , "KB/s"
1209 , "proc"
1210 , "diskstats"
1130 - , 2120
1211 + , 2121
1212 , update_every
1213 , RRDSET_TYPE_AREA
1214 );
@@ -1138,7 +1219,7 @@ int do_proc_diskstats(int update_every, usec_t dt) {
1219 else rrdset_next(d->st_bcache_rates);
1220
1221 rrddim_set_by_pointer(d->st_bcache_rates, d->rd_bcache_rate_writeback, writeback_rate);
1141 - rrddim_set_by_pointer(d->st_bcache_rates, d->rd_bcache_rate_congested, congested);
1222 + rrddim_set_by_pointer(d->st_bcache_rates, d->rd_bcache_rate_congested, cache_congested);
1223 rrdset_done(d->st_bcache_rates);
1224 }
1225
@@ -1154,7 +1235,7 @@ int do_proc_diskstats(int update_every, usec_t dt) {
1235 , "MB"
1236 , "proc"
1237 , "diskstats"
1157 - , 2121
1238 + , 2122
1239 , update_every
1240 , RRDSET_TYPE_AREA
1241 );
@@ -1179,7 +1260,7 @@ int do_proc_diskstats(int update_every, usec_t dt) {
1260 , "percent"
1261 , "proc"
1262 , "diskstats"
1182 - , 2122
1263 + , 2123
1264 , update_every
1265 , RRDSET_TYPE_AREA
1266 );
@@ -1192,7 +1273,7 @@ int do_proc_diskstats(int update_every, usec_t dt) {
1273 rrdset_done(d->st_bcache_usage);
1274 }
1275
1195 - if(d->do_bcache == CONFIG_BOOLEAN_YES || (d->do_bcache == CONFIG_BOOLEAN_AUTO && (cache_hits != 0 || cache_misses != 0 || cache_miss_collisions != 0))) {
1276 + if(d->do_bcache == CONFIG_BOOLEAN_YES || (d->do_bcache == CONFIG_BOOLEAN_AUTO && (stats_total_cache_hits != 0 || stats_total_cache_misses != 0 || stats_total_cache_miss_collisions != 0))) {
1277
1278 if(unlikely(!d->st_bcache)) {
1279 d->st_bcache = rrdset_create_localhost(
@@ -1205,7 +1286,7 @@ int do_proc_diskstats(int update_every, usec_t dt) {
1286 , "operations/s"
1287 , "proc"
1288 , "diskstats"
1208 - , 2123
1289 + , 2124
1290 , update_every
1291 , RRDSET_TYPE_LINE
1292 );
@@ -1219,14 +1300,14 @@ int do_proc_diskstats(int update_every, usec_t dt) {
1300 }
1301 else rrdset_next(d->st_bcache);
1302
1222 - rrddim_set_by_pointer(d->st_bcache, d->rd_bcache_hits, cache_hits);
1223 - rrddim_set_by_pointer(d->st_bcache, d->rd_bcache_misses, cache_misses);
1224 - rrddim_set_by_pointer(d->st_bcache, d->rd_bcache_miss_collisions, cache_miss_collisions);
1303 + rrddim_set_by_pointer(d->st_bcache, d->rd_bcache_hits, stats_total_cache_hits);
1304 + rrddim_set_by_pointer(d->st_bcache, d->rd_bcache_misses, stats_total_cache_misses);
1305 + rrddim_set_by_pointer(d->st_bcache, d->rd_bcache_miss_collisions, stats_total_cache_miss_collisions);
1306 rrddim_set_by_pointer(d->st_bcache, d->rd_bcache_readaheads, cache_readaheads);
1307 rrdset_done(d->st_bcache);
1308 }
1309
1229 - if(d->do_bcache == CONFIG_BOOLEAN_YES || (d->do_bcache == CONFIG_BOOLEAN_AUTO && (cache_bypass_hits != 0 || cache_bypass_misses != 0))) {
1310 + if(d->do_bcache == CONFIG_BOOLEAN_YES || (d->do_bcache == CONFIG_BOOLEAN_AUTO && (stats_total_cache_bypass_hits != 0 || stats_total_cache_bypass_misses != 0))) {
1311
1312 if(unlikely(!d->st_bcache_bypass)) {
1313 d->st_bcache_bypass = rrdset_create_localhost(
@@ -1239,7 +1320,7 @@ int do_proc_diskstats(int update_every, usec_t dt) {
1320 , "operations/s"
1321 , "proc"
1322 , "diskstats"
1242 - , 2124
1323 + , 2125
1324 , update_every
1325 , RRDSET_TYPE_LINE
1326 );
@@ -1251,8 +1332,8 @@ int do_proc_diskstats(int update_every, usec_t dt) {
1332 }
1333 else rrdset_next(d->st_bcache_bypass);
1334
1254 - rrddim_set_by_pointer(d->st_bcache_bypass, d->rd_bcache_bypass_hits, cache_bypass_hits);
1255 - rrddim_set_by_pointer(d->st_bcache_bypass, d->rd_bcache_bypass_misses, cache_bypass_misses);
1335 + rrddim_set_by_pointer(d->st_bcache_bypass, d->rd_bcache_bypass_hits, stats_total_cache_bypass_hits);
1336 + rrddim_set_by_pointer(d->st_bcache_bypass, d->rd_bcache_bypass_misses, stats_total_cache_bypass_misses);
1337 rrdset_done(d->st_bcache_bypass);
1338 }
1339 }
@@ -1316,6 +1397,7 @@ int do_proc_diskstats(int update_every, usec_t dt) {
1397 rrdset_obsolete_and_pointer_null(d->st_bcache_rates);
1398 rrdset_obsolete_and_pointer_null(d->st_bcache_size);
1399 rrdset_obsolete_and_pointer_null(d->st_bcache_usage);
1400 + rrdset_obsolete_and_pointer_null(d->st_bcache_hit_ratio);
1401
1402 if(d == disk_root) {
1403 disk_root = d = d->next;
@@ -1325,16 +1407,20 @@ int do_proc_diskstats(int update_every, usec_t dt) {
1407 last->next = d = d->next;
1408 }
1409
1328 - freez(t->bcache_filename_cache_congested);
1329 - freez(t->bcache_filename_stats_total_cache_readaheads);
1410 freez(t->bcache_filename_dirty_data);
1411 freez(t->bcache_filename_writeback_rate);
1332 - freez(t->bcache_filename_stats_total_cache_available_percent);
1412 + freez(t->bcache_filename_cache_congested);
1413 + freez(t->bcache_filename_cache_available_percent);
1414 + freez(t->bcache_filename_stats_five_minute_cache_hit_ratio);
1415 + freez(t->bcache_filename_stats_hour_cache_hit_ratio);
1416 + freez(t->bcache_filename_stats_day_cache_hit_ratio);
1417 + freez(t->bcache_filename_stats_total_cache_hit_ratio);
1418 freez(t->bcache_filename_stats_total_cache_hits);
1419 freez(t->bcache_filename_stats_total_cache_misses);
1420 freez(t->bcache_filename_stats_total_cache_miss_collisions);
1421 freez(t->bcache_filename_stats_total_cache_bypass_hits);
1422 freez(t->bcache_filename_stats_total_cache_bypass_misses);
1423 + freez(t->bcache_filename_stats_total_cache_readaheads);
1424
1425 freez(t->disk);
1426 freez(t->device);