190 lines
8.1 KiB
Diff
190 lines
8.1 KiB
Diff
From 3442cec3872d6c07eda21d147ebdd35ef2fea620 Mon Sep 17 00:00:00 2001
|
|
From: Sebastien GODARD <sysstat@users.noreply.github.com>
|
|
Date: Sat, 27 May 2023 16:31:05 +0200
|
|
Subject: [PATCH] iostat: Try to avoid some more negative values (#355)
|
|
|
|
Signed-off-by: Sebastien GODARD <sysstat@users.noreply.github.com>
|
|
|
|
Reference:https://github.com/sysstat/sysstat/commit/3442cec3872d6c07eda21d147ebdd35ef2fea620
|
|
Conflict:NA
|
|
|
|
---
|
|
iostat.c | 40 +++++++++++++++++++++++++++++-----------
|
|
rd_stats.c | 4 ++--
|
|
2 files changed, 31 insertions(+), 13 deletions(-)
|
|
|
|
diff --git a/iostat.c b/iostat.c
|
|
index 23b12f7..04b6ae3 100644
|
|
--- a/iostat.c
|
|
+++ b/iostat.c
|
|
@@ -970,6 +970,8 @@ void write_plain_ext_stat(unsigned long long itv, int fctr, int hpart,
|
|
if (DISPLAY_SHORT_OUTPUT(flags)) {
|
|
/* tps */
|
|
cprintf_f(NO_UNIT, 1, 8, 2,
|
|
+ ioi->rd_ios + ioi->wr_ios + ioi->dc_ios < ioj->rd_ios + ioj->wr_ios + ioj->dc_ios ?
|
|
+ 0.0 :
|
|
S_VALUE(ioj->rd_ios + ioj->wr_ios + ioj->dc_ios,
|
|
ioi->rd_ios + ioi->wr_ios + ioi->dc_ios, itv));
|
|
/* kB/s */
|
|
@@ -980,6 +982,8 @@ void write_plain_ext_stat(unsigned long long itv, int fctr, int hpart,
|
|
xios->sectors);
|
|
/* rqm/s */
|
|
cprintf_f(NO_UNIT, 1, 8, 2,
|
|
+ ioi->rd_merges + ioi->wr_merges + ioi->dc_merges < ioj->rd_merges + ioj->wr_merges + ioj->dc_merges ?
|
|
+ 0.0 :
|
|
S_VALUE(ioj->rd_merges + ioj->wr_merges + ioj->dc_merges,
|
|
ioi->rd_merges + ioi->wr_merges + ioi->dc_merges, itv));
|
|
/* await */
|
|
@@ -990,6 +994,7 @@ void write_plain_ext_stat(unsigned long long itv, int fctr, int hpart,
|
|
xds->arqsz / 2);
|
|
/* aqu-sz */
|
|
cprintf_f(NO_UNIT, 1, 7, 2,
|
|
+ ioi->rq_ticks < ioj->rq_ticks ? 0.0 :
|
|
S_VALUE(ioj->rq_ticks, ioi->rq_ticks, itv) / 1000.0);
|
|
/*
|
|
* %util
|
|
@@ -1011,6 +1016,7 @@ void write_plain_ext_stat(unsigned long long itv, int fctr, int hpart,
|
|
xios->rsectors);
|
|
/* rrqm/s */
|
|
cprintf_f(NO_UNIT, 1, 8, 2,
|
|
+ ioi->rd_merges < ioj->rd_merges ? 0.0 :
|
|
S_VALUE(ioj->rd_merges, ioi->rd_merges, itv));
|
|
/* %rrqm */
|
|
cprintf_pc(DISPLAY_UNIT(flags), 1, 6, 2,
|
|
@@ -1035,6 +1041,7 @@ void write_plain_ext_stat(unsigned long long itv, int fctr, int hpart,
|
|
xios->wsectors);
|
|
/* wrqm/s */
|
|
cprintf_f(NO_UNIT, 1, 8, 2,
|
|
+ ioi->wr_merges < ioj->wr_merges ? 0.0 :
|
|
S_VALUE(ioj->wr_merges, ioi->wr_merges, itv));
|
|
/* %wrqm */
|
|
cprintf_pc(DISPLAY_UNIT(flags), 1, 6, 2,
|
|
@@ -1059,6 +1066,7 @@ void write_plain_ext_stat(unsigned long long itv, int fctr, int hpart,
|
|
xios->dsectors);
|
|
/* drqm/s */
|
|
cprintf_f(NO_UNIT, 1, 8, 2,
|
|
+ ioi->dc_merges < ioj->dc_merges ? 0.0 :
|
|
S_VALUE(ioj->dc_merges, ioi->dc_merges, itv));
|
|
/* %drqm */
|
|
cprintf_pc(DISPLAY_UNIT(flags), 1, 6, 2,
|
|
@@ -1073,6 +1081,7 @@ void write_plain_ext_stat(unsigned long long itv, int fctr, int hpart,
|
|
if ((hpart == 4) || !hpart) {
|
|
/* aqu-sz */
|
|
cprintf_f(NO_UNIT, 1, 7, 2,
|
|
+ ioi->rq_ticks < ioj->rq_ticks ? 0.0 :
|
|
S_VALUE(ioj->rq_ticks, ioi->rq_ticks, itv) / 1000.0);
|
|
/*
|
|
* %util
|
|
@@ -1129,6 +1138,8 @@ void write_json_ext_stat(int tab, unsigned long long itv, int fctr,
|
|
|
|
if (DISPLAY_SHORT_OUTPUT(flags)) {
|
|
printf("\"tps\": %.2f, \"",
|
|
+ ioi->rd_ios + ioi->wr_ios + ioi->dc_ios < ioj->rd_ios + ioj->wr_ios + ioj->dc_ios ?
|
|
+ 0.0 :
|
|
S_VALUE(ioj->rd_ios + ioj->wr_ios + ioj->dc_ios,
|
|
ioi->rd_ios + ioi->wr_ios + ioi->dc_ios, itv));
|
|
if (DISPLAY_MEGABYTES(flags)) {
|
|
@@ -1143,11 +1154,14 @@ void write_json_ext_stat(int tab, unsigned long long itv, int fctr,
|
|
printf("\": %.2f, \"rqm/s\": %.2f, \"await\": %.2f, "
|
|
"\"areq-sz\": %.2f, \"aqu-sz\": %.2f, ",
|
|
xios->sectors /= fctr,
|
|
+ ioi->rd_merges + ioi->wr_merges + ioi->dc_merges < ioj->rd_merges + ioj->wr_merges + ioj->dc_merges ?
|
|
+ 0.0 :
|
|
S_VALUE(ioj->rd_merges + ioj->wr_merges + ioj->dc_merges,
|
|
ioi->rd_merges + ioi->wr_merges + ioi->dc_merges, itv),
|
|
xds->await,
|
|
xds->arqsz / 2,
|
|
- S_VALUE(ioj->rq_ticks, ioi->rq_ticks, itv) / 1000.0);
|
|
+ ioi->rq_ticks < ioj->rq_ticks ? 0.0
|
|
+ : S_VALUE(ioj->rq_ticks, ioi->rq_ticks, itv) / 1000.0);
|
|
}
|
|
else {
|
|
printf("\"r/s\": %.2f, \"w/s\": %.2f, \"d/s\": %.2f, ",
|
|
@@ -1175,9 +1189,12 @@ void write_json_ext_stat(int tab, unsigned long long itv, int fctr,
|
|
"\"r_await\": %.2f, \"w_await\": %.2f, \"d_await\": %.2f, "
|
|
"\"rareq-sz\": %.2f, \"wareq-sz\": %.2f, \"dareq-sz\": %.2f, "
|
|
"\"aqu-sz\": %.2f, ",
|
|
- S_VALUE(ioj->rd_merges, ioi->rd_merges, itv),
|
|
- S_VALUE(ioj->wr_merges, ioi->wr_merges, itv),
|
|
- S_VALUE(ioj->dc_merges, ioi->dc_merges, itv),
|
|
+ ioi->rd_merges < ioj->rd_merges ? 0.0
|
|
+ : S_VALUE(ioj->rd_merges, ioi->rd_merges, itv),
|
|
+ ioi->wr_merges < ioj->wr_merges ? 0.0
|
|
+ : S_VALUE(ioj->wr_merges, ioi->wr_merges, itv),
|
|
+ ioi->dc_merges < ioj->dc_merges ? 0.0
|
|
+ : S_VALUE(ioj->dc_merges, ioi->dc_merges, itv),
|
|
xios->rrqm_pc,
|
|
xios->wrqm_pc,
|
|
xios->drqm_pc,
|
|
@@ -1187,7 +1204,8 @@ void write_json_ext_stat(int tab, unsigned long long itv, int fctr,
|
|
xios->rarqsz / 2,
|
|
xios->warqsz / 2,
|
|
xios->darqsz / 2,
|
|
- S_VALUE(ioj->rq_ticks, ioi->rq_ticks, itv) / 1000.0);
|
|
+ ioi->rq_ticks < ioj->rq_ticks ? 0.0
|
|
+ : S_VALUE(ioj->rq_ticks, ioi->rq_ticks, itv) / 1000.0);
|
|
}
|
|
|
|
if (d->dev_tp > T_GROUP) {
|
|
@@ -1286,11 +1304,11 @@ void write_ext_stat(unsigned long long itv, int fctr, int hpart,
|
|
((ioi->rd_merges - ioj->rd_merges) + (ioi->rd_ios - ioj->rd_ios)) * 100 :
|
|
0.0;
|
|
/* r_await */
|
|
- xios.r_await = (ioi->rd_ios - ioj->rd_ios) ?
|
|
+ xios.r_await = (ioi->rd_ios > ioj->rd_ios) ?
|
|
(ioi->rd_ticks - ioj->rd_ticks) /
|
|
((double) (ioi->rd_ios - ioj->rd_ios)) : 0.0;
|
|
/* rareq-sz (still in sectors, not kB) */
|
|
- xios.rarqsz = (ioi->rd_ios - ioj->rd_ios) ?
|
|
+ xios.rarqsz = (ioi->rd_ios > ioj->rd_ios) ?
|
|
(ioi->rd_sectors - ioj->rd_sectors) / ((double) (ioi->rd_ios - ioj->rd_ios)) :
|
|
0.0;
|
|
}
|
|
@@ -1301,11 +1319,11 @@ void write_ext_stat(unsigned long long itv, int fctr, int hpart,
|
|
((ioi->wr_merges - ioj->wr_merges) + (ioi->wr_ios - ioj->wr_ios)) * 100 :
|
|
0.0;
|
|
/* w_await */
|
|
- xios.w_await = (ioi->wr_ios - ioj->wr_ios) ?
|
|
+ xios.w_await = (ioi->wr_ios > ioj->wr_ios) ?
|
|
(ioi->wr_ticks - ioj->wr_ticks) /
|
|
((double) (ioi->wr_ios - ioj->wr_ios)) : 0.0;
|
|
/* wareq-sz (still in sectors, not kB) */
|
|
- xios.warqsz = (ioi->wr_ios - ioj->wr_ios) ?
|
|
+ xios.warqsz = (ioi->wr_ios > ioj->wr_ios) ?
|
|
(ioi->wr_sectors - ioj->wr_sectors) / ((double) (ioi->wr_ios - ioj->wr_ios)) :
|
|
0.0;
|
|
}
|
|
@@ -1316,11 +1334,11 @@ void write_ext_stat(unsigned long long itv, int fctr, int hpart,
|
|
((ioi->dc_merges - ioj->dc_merges) + (ioi->dc_ios - ioj->dc_ios)) * 100 :
|
|
0.0;
|
|
/* d_await */
|
|
- xios.d_await = (ioi->dc_ios - ioj->dc_ios) ?
|
|
+ xios.d_await = (ioi->dc_ios > ioj->dc_ios) ?
|
|
(ioi->dc_ticks - ioj->dc_ticks) /
|
|
((double) (ioi->dc_ios - ioj->dc_ios)) : 0.0;
|
|
/* dareq-sz (still in sectors, not kB) */
|
|
- xios.darqsz = (ioi->dc_ios - ioj->dc_ios) ?
|
|
+ xios.darqsz = (ioi->dc_ios > ioj->dc_ios) ?
|
|
(ioi->dc_sectors - ioj->dc_sectors) / ((double) (ioi->dc_ios - ioj->dc_ios)) :
|
|
0.0;
|
|
}
|
|
diff --git a/rd_stats.c b/rd_stats.c
|
|
index fcae43e..610b843 100644
|
|
--- a/rd_stats.c
|
|
+++ b/rd_stats.c
|
|
@@ -376,10 +376,10 @@ void compute_ext_disk_stats(struct stats_disk *sdc, struct stats_disk *sdp,
|
|
* Kernel gives ticks already in milliseconds for all platforms
|
|
* => no need for further scaling.
|
|
*/
|
|
- xds->await = (sdc->nr_ios - sdp->nr_ios) ?
|
|
+ xds->await = (sdc->nr_ios > sdp->nr_ios) ?
|
|
((sdc->rd_ticks - sdp->rd_ticks) + (sdc->wr_ticks - sdp->wr_ticks) + (sdc->dc_ticks - sdp->dc_ticks)) /
|
|
((double) (sdc->nr_ios - sdp->nr_ios)) : 0.0;
|
|
- xds->arqsz = (sdc->nr_ios - sdp->nr_ios) ?
|
|
+ xds->arqsz = (sdc->nr_ios > sdp->nr_ios) ?
|
|
((sdc->rd_sect - sdp->rd_sect) + (sdc->wr_sect - sdp->wr_sect) + (sdc->dc_sect - sdp->dc_sect)) /
|
|
((double) (sdc->nr_ios - sdp->nr_ios)) : 0.0;
|
|
}
|
|
--
|
|
2.33.0
|