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