From 683edacb0ed4f1611945a6b5f49b4e48ce2906a6 Mon Sep 17 00:00:00 2001 From: Sebastien GODARD Date: Wed, 7 Jun 2017 11:02:22 +0200 Subject: [PATCH] Apply "sar -d" changes to sadf Replace "rd_sec/s" and "wr_sec/s" fields (expressed in sectors) with "rkB/s" and "wkB/s" (expressed in kilobytes). Replace "avgrq-sz" field (expressed in sectors) with "areq-sz" (expressed in kilobytes). Rename "avgqu-sz" field to "aqu-sz". Original field names are still present in sadf's XML and JSON output to keep backward compatibility. Signed-off-by: Sebastien GODARD --- json_stats.c | 12 ++++++++++-- raw_stats.c | 2 +- rndr_stats.c | 14 +++++++------- svg_stats.c | 45 ++++++++++++++++++++++++++++++--------------- xml_stats.c | 12 ++++++++++-- 5 files changed, 58 insertions(+), 27 deletions(-) diff --git a/json_stats.c b/json_stats.c index 209e431..82f4ac8 100644 --- a/json_stats.c +++ b/json_stats.c @@ -734,18 +734,26 @@ __print_funct_t json_print_disk_stats(struct activity *a, int curr, int tab, "\"tps\": %.2f, " "\"rd_sec\": %.2f, " "\"wr_sec\": %.2f, " + "\"rkB\": %.2f, " + "\"wkB\": %.2f, " "\"avgrq-sz\": %.2f, " + "\"areq-sz\": %.2f, " "\"avgqu-sz\": %.2f, " + "\"aqu-sz\": %.2f, " "\"await\": %.2f, " "\"svctm\": %.2f, " "\"util-percent\": %.2f}", /* Confusion possible here between index and minor numbers */ dev_name, S_VALUE(sdp->nr_ios, sdc->nr_ios, itv), - S_VALUE(sdp->rd_sect, sdc->rd_sect, itv), + S_VALUE(sdp->rd_sect, sdc->rd_sect, itv), /* Unit = sectors (for backward compatibility) */ S_VALUE(sdp->wr_sect, sdc->wr_sect, itv), + S_VALUE(sdp->rd_sect, sdc->rd_sect, itv) / 2, + S_VALUE(sdp->wr_sect, sdc->wr_sect, itv) / 2, /* See iostat for explanations */ - xds.arqsz, + xds.arqsz, /* Unit = sectors (for backward compatibility) */ + xds.arqsz / 2, + S_VALUE(sdp->rq_ticks, sdc->rq_ticks, itv) / 1000.0, /* For backward compatibility */ S_VALUE(sdp->rq_ticks, sdc->rq_ticks, itv) / 1000.0, xds.await, xds.svctm, diff --git a/raw_stats.c b/raw_stats.c index 244c8a5..63e5907 100644 --- a/raw_stats.c +++ b/raw_stats.c @@ -567,7 +567,7 @@ __print_funct_t raw_print_disk_stats(struct activity *a, char *timestr, int curr pval((unsigned long long) sdp->wr_sect, (unsigned long long) sdc->wr_sect); printf(" tot_ticks:"); pval((unsigned long long) sdp->tot_ticks, (unsigned long long) sdc->tot_ticks); - pfield(NULL, 0); /* Skip avgrq-sz */ + pfield(NULL, 0); /* Skip areq-sz */ printf(" %s:", pfield(NULL, 0)); pval((unsigned long long) sdp->rq_ticks, (unsigned long long) sdc->rq_ticks); printf("\n"); diff --git a/rndr_stats.c b/rndr_stats.c index 6f4e29a..e63cf55 100644 --- a/rndr_stats.c +++ b/rndr_stats.c @@ -1078,28 +1078,28 @@ __print_funct_t render_disk_stats(struct activity *a, int isdb, char *pre, NULL); render(isdb, pre, PT_NOFLAG, - "%s\trd_sec/s", NULL, + "%s\trkB/s", NULL, cons(sv, dev_name, NULL), NOVAL, - S_VALUE(sdp->rd_sect, sdc->rd_sect, itv), + S_VALUE(sdp->rd_sect, sdc->rd_sect, itv) / 2, NULL); render(isdb, pre, PT_NOFLAG, - "%s\twr_sec/s", NULL, + "%s\twkB/s", NULL, cons(sv, dev_name, NULL), NOVAL, - S_VALUE(sdp->wr_sect, sdc->wr_sect, itv), + S_VALUE(sdp->wr_sect, sdc->wr_sect, itv) / 2, NULL); render(isdb, pre, PT_NOFLAG, - "%s\tavgrq-sz", NULL, + "%s\tareq-sz", NULL, cons(sv, dev_name, NULL), NOVAL, - xds.arqsz, + xds.arqsz / 2, NULL); render(isdb, pre, PT_NOFLAG, - "%s\tavgqu-sz", NULL, + "%s\taqu-sz", NULL, cons(sv, dev_name, NULL), NOVAL, S_VALUE(sdp->rq_ticks, sdc->rq_ticks, itv) / 1000.0, diff --git a/svg_stats.c b/svg_stats.c index 6982e73..87cf714 100644 --- a/svg_stats.c +++ b/svg_stats.c @@ -1960,8 +1960,8 @@ __print_funct_t svg_print_disk_stats(struct activity *a, int curr, int action, s "Disk statistics (3)", "Disk statistics (4)", "Disk statistics (5)"}; char *g_title[] = {"tps", - "rd_sec/s", "wr_sec/s", - "avgrq-sz", "avgqu-sz", + "rkB/s", "wkB/s", + "areq-sz", "aqu-sz", "await", "svctm", "%util"}; int g_fields[] = {0, 1, 2}; @@ -1969,7 +1969,7 @@ __print_funct_t svg_print_disk_stats(struct activity *a, int curr, int action, s static char **out; static int *outsize; char *item_name, *persist_dev_name; - double aqusz; + double rkB, wkB, aqusz; int i, j, k, pos, restart, *unregistered; if (action & F_BEGIN) { @@ -2052,15 +2052,30 @@ __print_funct_t svg_print_disk_stats(struct activity *a, int curr, int action, s } /* Check for min/max values */ - save_extrema(1, 2, 0, (void *) sdc, (void *) sdp, + save_extrema(1, 0, 0, (void *) sdc, (void *) sdp, itv, spmin + pos, spmax + pos, g_fields); + rkB = S_VALUE(sdp->rd_sect, sdc->rd_sect, itv) / 2; + wkB = S_VALUE(sdp->wr_sect, sdc->wr_sect, itv) / 2; + if (rkB < *(spmin + pos + 1)) { + *(spmin + pos + 1) = rkB; + } + if (rkB > *(spmax + pos + 1)) { + *(spmax + pos + 1) = rkB; + } + if (wkB < *(spmin + pos + 2)) { + *(spmin + pos + 2) = wkB; + } + if (wkB > *(spmax + pos + 2)) { + *(spmax + pos + 2) = wkB; + } + compute_ext_disk_stats(sdc, sdp, itv, &xds); - if (xds.arqsz < *(spmin + pos + 3)) { - *(spmin + pos + 3) = xds.arqsz; + if ((xds.arqsz / 2) < *(spmin + pos + 3)) { + *(spmin + pos + 3) = xds.arqsz / 2; } - if (xds.arqsz > *(spmax + pos + 3)) { - *(spmax + pos + 3) = xds.arqsz; + if ((xds.arqsz / 2) > *(spmax + pos + 3)) { + *(spmax + pos + 3) = xds.arqsz / 2; } aqusz = S_VALUE(sdp->rq_ticks, sdc->rq_ticks, itv) / 1000.0; if (aqusz < *(spmin + pos + 4)) { @@ -2092,19 +2107,19 @@ __print_funct_t svg_print_disk_stats(struct activity *a, int curr, int action, s lnappend(record_hdr->ust_time - svg_p->ust_time_ref, S_VALUE(sdp->nr_ios, sdc->nr_ios, itv), out + pos, outsize + pos, restart); - /* rd_sec/s */ + /* rkB/s */ lnappend(record_hdr->ust_time - svg_p->ust_time_ref, - S_VALUE(sdp->rd_sect, sdc->rd_sect, itv), + S_VALUE(sdp->rd_sect, sdc->rd_sect, itv) / 2, out + pos + 1, outsize + pos + 1, restart); - /* wr_sec/s */ + /* wkB/s */ lnappend(record_hdr->ust_time - svg_p->ust_time_ref, - S_VALUE(sdp->wr_sect, sdc->wr_sect, itv), + S_VALUE(sdp->wr_sect, sdc->wr_sect, itv) / 2, out + pos + 2, outsize + pos + 2, restart); - /* avgrq-sz */ + /* areq-sz */ lnappend(record_hdr->ust_time - svg_p->ust_time_ref, - xds.arqsz, + xds.arqsz / 2, out + pos + 3, outsize + pos + 3, restart); - /* avgqu-sz */ + /* aqu-sz */ lnappend(record_hdr->ust_time - svg_p->ust_time_ref, aqusz, out + pos + 4, outsize + pos + 4, restart); diff --git a/xml_stats.c b/xml_stats.c index ebc285c..97fd258 100644 --- a/xml_stats.c +++ b/xml_stats.c @@ -713,18 +713,26 @@ __print_funct_t xml_print_disk_stats(struct activity *a, int curr, int tab, "tps=\"%.2f\" " "rd_sec=\"%.2f\" " "wr_sec=\"%.2f\" " + "rkB=\"%.2f\" " + "wkB=\"%.2f\" " "avgrq-sz=\"%.2f\" " + "areq-sz=\"%.2f\" " "avgqu-sz=\"%.2f\" " + "aqu-sz=\"%.2f\" " "await=\"%.2f\" " "svctm=\"%.2f\" " "util-percent=\"%.2f\"/>", /* Confusion possible here between index and minor numbers */ dev_name, S_VALUE(sdp->nr_ios, sdc->nr_ios, itv), - S_VALUE(sdp->rd_sect, sdc->rd_sect, itv), + S_VALUE(sdp->rd_sect, sdc->rd_sect, itv), /* Unit = sectors (for backward compatibility) */ S_VALUE(sdp->wr_sect, sdc->wr_sect, itv), + S_VALUE(sdp->rd_sect, sdc->rd_sect, itv) / 2, + S_VALUE(sdp->wr_sect, sdc->wr_sect, itv) / 2, /* See iostat for explanations */ - xds.arqsz, + xds.arqsz, /* Unit = sectors (for backward compatibility) */ + xds.arqsz / 2, + S_VALUE(sdp->rq_ticks, sdc->rq_ticks, itv) / 1000.0, /* For backward compatibility */ S_VALUE(sdp->rq_ticks, sdc->rq_ticks, itv) / 1000.0, xds.await, xds.svctm, -- 2.49.0