proc/diskstats: Increase accuracy of average IO operation time (#18040)
proc/diskstats: collect avg io op time in microseconds
Ilya Mashchenko committed
Jun 30, 2024 at 00:56 UTC
e9103d99881a51983848fe1d457b4fda6a4a6c3c
1 file changed
+23
-14
src/collectors/proc.plugin/proc_diskstats.c
+23
-14
@@ -1946,14 +1946,17 @@ int do_proc_diskstats(int update_every, usec_t dt) {
1946
1947
rrdset_flag_set(d->st_await, RRDSET_FLAG_DETAIL);
1948
1949
- d->rd_await_reads = rrddim_add(d->st_await, "reads", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
1950
- d->rd_await_writes = rrddim_add(d->st_await, "writes", NULL, -1, 1, RRD_ALGORITHM_ABSOLUTE);
1949
+ d->rd_await_reads = rrddim_add(d->st_await, "reads", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
1950
+ d->rd_await_writes = rrddim_add(d->st_await, "writes", NULL, -1, 1000, RRD_ALGORITHM_ABSOLUTE);
1951
1952
add_labels_to_disk(d, d->st_await);
1953
}
1954
1955
- rrddim_set_by_pointer(d->st_await, d->rd_await_reads, (reads - last_reads) ? (readms - last_readms) / (reads - last_reads) : 0);
1956
- rrddim_set_by_pointer(d->st_await, d->rd_await_writes, (writes - last_writes) ? (writems - last_writems) / (writes - last_writes) : 0);
1955
+ double read_avg = (reads - last_reads) ? (double)(readms - last_readms) / (reads - last_reads) : 0;
1956
+ double write_avg = (writes - last_writes) ? (double)(writems - last_writems) / (writes - last_writes) : 0;
1957
+
1958
+ rrddim_set_by_pointer(d->st_await, d->rd_await_reads, (collected_number)(read_avg * 1000));
1959
+ rrddim_set_by_pointer(d->st_await, d->rd_await_writes, (collected_number)(write_avg * 1000));
1960
rrdset_done(d->st_await);
1961
}
1962
@@ -1976,21 +1979,22 @@ int do_proc_diskstats(int update_every, usec_t dt) {
1979
1980
rrdset_flag_set(d->st_ext_await, RRDSET_FLAG_DETAIL);
1981
1979
- d->rd_await_discards = rrddim_add(d->st_ext_await, "discards", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
1982
+ d->rd_await_discards = rrddim_add(d->st_ext_await, "discards", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
1983
if (do_fl_stats)
1981
- d->rd_await_flushes = rrddim_add(d->st_ext_await, "flushes", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
1984
+ d->rd_await_flushes = rrddim_add(d->st_ext_await, "flushes", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
1985
1986
add_labels_to_disk(d, d->st_ext_await);
1987
}
1988
1986
- rrddim_set_by_pointer(
1987
- d->st_ext_await, d->rd_await_discards,
1988
- (discards - last_discards) ? (discardms - last_discardms) / (discards - last_discards) : 0);
1989
+ double discard_avg =
1990
+ (discards - last_discards) ? (double)(discardms - last_discardms) / (discards - last_discards) : 0;
1991
+ double flushe_avg =
1992
+ (flushes - last_flushes) ? (double)(flushms - last_flushms) / (flushes - last_flushes) : 0;
1993
+
1994
+ rrddim_set_by_pointer(d->st_ext_await, d->rd_await_discards, (collected_number)(discard_avg * 1000));
1995
1996
if (do_fl_stats)
1991
- rrddim_set_by_pointer(
1992
- d->st_ext_await, d->rd_await_flushes,
1993
- (flushes - last_flushes) ? (flushms - last_flushms) / (flushes - last_flushes) : 0);
1997
+ rrddim_set_by_pointer(d->st_ext_await, d->rd_await_flushes, (collected_number)(flushe_avg * 1000));
1998
1999
rrdset_done(d->st_ext_await);
2000
}
@@ -2077,12 +2081,17 @@ int do_proc_diskstats(int update_every, usec_t dt) {
2081
2082
rrdset_flag_set(d->st_svctm, RRDSET_FLAG_DETAIL);
2083
2080
- d->rd_svctm_svctm = rrddim_add(d->st_svctm, "svctm", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
2084
+ d->rd_svctm_svctm = rrddim_add(d->st_svctm, "svctm", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
2085
2086
add_labels_to_disk(d, d->st_svctm);
2087
}
2088
2085
- rrddim_set_by_pointer(d->st_svctm, d->rd_svctm_svctm, ((reads - last_reads) + (writes - last_writes)) ? (busy_ms - last_busy_ms) / ((reads - last_reads) + (writes - last_writes)) : 0);
2089
+ double svctm_avg =
2090
+ ((reads - last_reads) + (writes - last_writes)) ?
2091
+ (double)(busy_ms - last_busy_ms) / ((reads - last_reads) + (writes - last_writes)) :
2092
+ 0;
2093
+
2094
+ rrddim_set_by_pointer(d->st_svctm, d->rd_svctm_svctm, (collected_number)(svctm_avg * 1000));
2095
rrdset_done(d->st_svctm);
2096
}
2097
}