X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=gclient.c;h=fe83382f32a7566f8e6199e010eae48390b09830;hb=695611a9d4cd554d44d8b2ec5da2811061950a2e;hp=d2044f323f1b03703397bbe066eb36dd04ab1bca;hpb=3e306f32b029445a0d1457897fbf700c92940a84;p=fio.git diff --git a/gclient.c b/gclient.c index d2044f32..fe83382f 100644 --- a/gclient.c +++ b/gclient.c @@ -1155,18 +1155,21 @@ out: #define GFIO_CLAT 1 #define GFIO_SLAT 2 #define GFIO_LAT 4 +#define GFIO_HILAT 8 +#define GFIO_LOLAT 16 static void gfio_show_ddir_status(struct gfio_client *gc, GtkWidget *mbox, struct group_run_stats *rs, struct thread_stat *ts, int ddir) { const char *ddir_label[3] = { "Read", "Write", "Trim" }; + const char *hilat, *lolat; GtkWidget *frame, *label, *box, *vbox, *main_vbox; - unsigned long long min[3], max[3]; + unsigned long long min[5], max[5]; unsigned long runt; unsigned long long bw, iops; unsigned int flags = 0; - double mean[3], dev[3]; + double mean[5], dev[5]; char *io_p, *io_palt, *bw_p, *bw_palt, *iops_p; char tmp[128]; int i2p; @@ -1265,6 +1268,14 @@ static void gfio_show_ddir_status(struct gfio_client *gc, GtkWidget *mbox, flags |= GFIO_CLAT; if (calc_lat(&ts->lat_stat[ddir], &min[2], &max[2], &mean[2], &dev[2])) flags |= GFIO_LAT; + if (calc_lat(&ts->clat_high_prio_stat[ddir], &min[3], &max[3], &mean[3], &dev[3])) { + flags |= GFIO_HILAT; + if (calc_lat(&ts->clat_low_prio_stat[ddir], &min[4], &max[4], &mean[4], &dev[4])) + flags |= GFIO_LOLAT; + /* we only want to print low priority statistics if other IOs were + * submitted with the priority bit set + */ + } if (flags) { frame = gtk_frame_new("Latency"); @@ -1273,12 +1284,24 @@ static void gfio_show_ddir_status(struct gfio_client *gc, GtkWidget *mbox, vbox = gtk_vbox_new(FALSE, 3); gtk_container_add(GTK_CONTAINER(frame), vbox); + if (ts->lat_percentiles) { + hilat = "High priority total latency"; + lolat = "Low priority total latency"; + } else { + hilat = "High priority completion latency"; + lolat = "Low priority completion latency"; + } + if (flags & GFIO_SLAT) gfio_show_lat(vbox, "Submission latency", min[0], max[0], mean[0], dev[0]); if (flags & GFIO_CLAT) gfio_show_lat(vbox, "Completion latency", min[1], max[1], mean[1], dev[1]); if (flags & GFIO_LAT) gfio_show_lat(vbox, "Total latency", min[2], max[2], mean[2], dev[2]); + if (flags & GFIO_HILAT) + gfio_show_lat(vbox, hilat, min[3], max[3], mean[3], dev[3]); + if (flags & GFIO_LOLAT) + gfio_show_lat(vbox, lolat, min[4], max[4], mean[4], dev[4]); } if (ts->slat_percentiles && flags & GFIO_SLAT) @@ -1286,16 +1309,40 @@ static void gfio_show_ddir_status(struct gfio_client *gc, GtkWidget *mbox, ts->io_u_plat[FIO_SLAT][ddir], ts->slat_stat[ddir].samples, "Submission"); - if (ts->clat_percentiles && flags & GFIO_CLAT) + if (ts->clat_percentiles && flags & GFIO_CLAT) { gfio_show_clat_percentiles(gc, main_vbox, ts, ddir, ts->io_u_plat[FIO_CLAT][ddir], ts->clat_stat[ddir].samples, "Completion"); - if (ts->lat_percentiles && flags & GFIO_LAT) + if (!ts->lat_percentiles) { + if (flags & GFIO_HILAT) + gfio_show_clat_percentiles(gc, main_vbox, ts, ddir, + ts->io_u_plat_high_prio[ddir], + ts->clat_high_prio_stat[ddir].samples, + "High priority completion"); + if (flags & GFIO_LOLAT) + gfio_show_clat_percentiles(gc, main_vbox, ts, ddir, + ts->io_u_plat_low_prio[ddir], + ts->clat_low_prio_stat[ddir].samples, + "Low priority completion"); + } + } + if (ts->lat_percentiles && flags & GFIO_LAT) { gfio_show_clat_percentiles(gc, main_vbox, ts, ddir, ts->io_u_plat[FIO_LAT][ddir], ts->lat_stat[ddir].samples, "Total"); + if (flags & GFIO_HILAT) + gfio_show_clat_percentiles(gc, main_vbox, ts, ddir, + ts->io_u_plat_high_prio[ddir], + ts->clat_high_prio_stat[ddir].samples, + "High priority total"); + if (flags & GFIO_LOLAT) + gfio_show_clat_percentiles(gc, main_vbox, ts, ddir, + ts->io_u_plat_low_prio[ddir], + ts->clat_low_prio_stat[ddir].samples, + "Low priority total"); + } free(io_p); free(bw_p);