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