@cryptotaxi247 / netdata-1 / commits / 93cc50c6c

added bcache cache_read_races metric for tracking cache device read failures; related to #3504

Costa Tsaousis (ktsaou) committed May 29, 2018 at 00:49 UTC 93cc50c6c3c3bdb2b9b742c6896e2ac63fcd3093
1 file changed +41 -1
src/proc_diskstats.c
+41 -1
@@ -48,7 +48,7 @@ static struct disk {
48 char *bcache_filename_stats_total_cache_bypass_hits;
49 char *bcache_filename_stats_total_cache_bypass_misses;
50 char *bcache_filename_stats_total_cache_readaheads;
51 -
51 + char *bcache_filename_cache_read_races;
52 char *bcache_filename_priority_stats;
53
54 RRDSET *st_io;
@@ -120,6 +120,9 @@ static struct disk {
120 RRDDIM *rd_bcache_cache_allocations_metadata;
121 RRDDIM *rd_bcache_cache_allocations_unknown;
122
123 + RRDSET *st_bcache_cache_read_races;
124 + RRDDIM *rd_bcache_cache_read_races;
125 +
126 struct disk *next;
127 } *disk_root = NULL;
128
@@ -629,6 +632,12 @@ static struct disk *get_disk(unsigned long major, unsigned long minor, char *dis
632 else
633 error("bcache file '%s' cannot be read.", buffer2);
634
635 + snprintfz(buffer2, FILENAME_MAX, "%s/cache/internal/cache_read_races", buffer);
636 + if(access(buffer2, R_OK) == 0)
637 + d->bcache_filename_cache_read_races = strdupz(buffer2);
638 + else
639 + error("bcache file '%s' cannot be read.", buffer2);
640 +
641 snprintfz(buffer2, FILENAME_MAX, "%s/dirty_data", buffer);
642 if(access(buffer2, R_OK) == 0)
643 d->bcache_filename_dirty_data = strdupz(buffer2);
@@ -1209,6 +1218,7 @@ int do_proc_diskstats(int update_every, usec_t dt) {
1218 stats_total_cache_hit_ratio = 0,
1219 cache_available_percent = 0,
1220 cache_readaheads = 0,
1221 + cache_read_races = 0,
1222 cache_congested = 0,
1223 dirty_data = 0,
1224 writeback_rate = 0;
@@ -1257,6 +1267,9 @@ int do_proc_diskstats(int update_every, usec_t dt) {
1267 if(d->bcache_filename_stats_total_cache_readaheads)
1268 cache_readaheads = bcache_read_number_with_units(d->bcache_filename_stats_total_cache_readaheads);
1269
1270 + if(d->bcache_filename_cache_read_races)
1271 + cache_read_races = bcache_read_number_with_units(d->bcache_filename_cache_read_races);
1272 +
1273 if(d->bcache_filename_priority_stats)
1274 bcache_read_priority_stats(d, family, update_every);
1275
@@ -1371,6 +1384,32 @@ int do_proc_diskstats(int update_every, usec_t dt) {
1384 rrdset_done(d->st_bcache_usage);
1385 }
1386
1387 + {
1388 +
1389 + if(unlikely(!d->st_bcache_cache_read_races)) {
1390 + d->st_bcache_cache_read_races = rrdset_create_localhost(
1391 + "disk_bcache_cache_read_races"
1392 + , d->device
1393 + , d->disk
1394 + , family
1395 + , "disk.disk_bcache_cache_read_races"
1396 + , "BCache Cache Read Races"
1397 + , "operations/s"
1398 + , "proc"
1399 + , "diskstats"
1400 + , 2126
1401 + , update_every
1402 + , RRDSET_TYPE_LINE
1403 + );
1404 +
1405 + d->rd_bcache_cache_read_races = rrddim_add(d->st_bcache_cache_read_races, "races", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1406 + }
1407 + else rrdset_next(d->st_bcache_cache_read_races);
1408 +
1409 + rrddim_set_by_pointer(d->st_bcache_cache_read_races, d->rd_bcache_cache_read_races, cache_read_races);
1410 + rrdset_done(d->st_bcache_cache_read_races);
1411 + }
1412 +
1413 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))) {
1414
1415 if(unlikely(!d->st_bcache)) {
@@ -1519,6 +1558,7 @@ int do_proc_diskstats(int update_every, usec_t dt) {
1558 freez(t->bcache_filename_stats_total_cache_bypass_hits);
1559 freez(t->bcache_filename_stats_total_cache_bypass_misses);
1560 freez(t->bcache_filename_stats_total_cache_readaheads);
1561 + freez(t->bcache_filename_cache_read_races);
1562 freez(t->bcache_filename_priority_stats);
1563
1564 freez(t->disk);