@cryptotaxi247 / netdata-1 / commits / e9103d998

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 }