X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=stat.c;h=beec574d8bd4e80767e683f5631e838d6df853d1;hb=bd553af6c8498deb87d666b7fa6d5750498a2c1b;hp=369f96967ae0c6e6084a3dace34e97de5304a877;hpb=54c05828da413f6b4f9eec800a30624c453a4d90;p=fio.git diff --git a/stat.c b/stat.c index 369f9696..beec574d 100644 --- a/stat.c +++ b/stat.c @@ -483,7 +483,7 @@ static void show_ddir_status(struct group_run_stats *rs, struct thread_stat *ts, } if (rs->agg[ddir]) { - p_of_agg = mean * 100 / (double) rs->agg[ddir]; + p_of_agg = mean * 100 / (double) (rs->agg[ddir] / 1024); if (p_of_agg > 100.0) p_of_agg = 100.0; } @@ -497,13 +497,13 @@ static void show_ddir_status(struct group_run_stats *rs, struct thread_stat *ts, } log_buf(out, " bw (%5s/s): min=%5llu, max=%5llu, per=%3.2f%%, " - "avg=%5.02f, stdev=%5.02f, samples=%5lu\n", + "avg=%5.02f, stdev=%5.02f, samples=%" PRIu64 "\n", bw_str, min, max, p_of_agg, mean, dev, (&ts->bw_stat[ddir])->samples); } if (calc_lat(&ts->iops_stat[ddir], &min, &max, &mean, &dev)) { - log_buf(out, " iops : min=%5llu, max=%5llu, avg=%5.02f, " - "stdev=%5.02f, samples=%5lu\n", + log_buf(out, " iops : min=%5llu, max=%5llu, " + "avg=%5.02f, stdev=%5.02f, samples=%" PRIu64 "\n", min, max, mean, dev, (&ts->iops_stat[ddir])->samples); } } @@ -863,13 +863,13 @@ static void show_thread_status_normal(struct thread_stat *ts, static void show_ddir_status_terse(struct thread_stat *ts, struct group_run_stats *rs, int ddir, - struct buf_output *out) + int ver, struct buf_output *out) { unsigned long long min, max, minv, maxv, bw, iops; unsigned long long *ovals = NULL; double mean, dev; unsigned int len; - int i; + int i, bw_stat; assert(ddir_rw(ddir)); @@ -919,7 +919,8 @@ static void show_ddir_status_terse(struct thread_stat *ts, if (ovals) free(ovals); - if (calc_lat(&ts->bw_stat[ddir], &min, &max, &mean, &dev)) { + bw_stat = calc_lat(&ts->bw_stat[ddir], &min, &max, &mean, &dev); + if (bw_stat) { double p_of_agg = 100.0; if (rs->agg[ddir]) { @@ -931,6 +932,19 @@ static void show_ddir_status_terse(struct thread_stat *ts, log_buf(out, ";%llu;%llu;%f%%;%f;%f", min, max, p_of_agg, mean, dev); } else log_buf(out, ";%llu;%llu;%f%%;%f;%f", 0ULL, 0ULL, 0.0, 0.0, 0.0); + + if (ver == 5) { + if (bw_stat) + log_buf(out, ";%" PRIu64, (&ts->bw_stat[ddir])->samples); + else + log_buf(out, ";%lu", 0UL); + + if (calc_lat(&ts->iops_stat[ddir], &min, &max, &mean, &dev)) + log_buf(out, ";%llu;%llu;%f;%f;%" PRIu64, min, max, + mean, dev, (&ts->iops_stat[ddir])->samples); + else + log_buf(out, ";%llu;%llu;%f;%f;%lu", 0ULL, 0ULL, 0.0, 0.0, 0UL); + } } static void add_ddir_status_json(struct thread_stat *ts, @@ -1069,9 +1083,9 @@ static void add_ddir_status_json(struct thread_stat *ts, (&ts->iops_stat[ddir])->samples); } -static void show_thread_status_terse_v2(struct thread_stat *ts, - struct group_run_stats *rs, - struct buf_output *out) +static void show_thread_status_terse_all(struct thread_stat *ts, + struct group_run_stats *rs, int ver, + struct buf_output *out) { double io_u_dist[FIO_IO_U_MAP_NR]; double io_u_lat_u[FIO_IO_U_LAT_U_NR]; @@ -1080,78 +1094,19 @@ static void show_thread_status_terse_v2(struct thread_stat *ts, int i; /* General Info */ - log_buf(out, "2;%s;%d;%d", ts->name, ts->groupid, ts->error); - /* Log Read Status */ - show_ddir_status_terse(ts, rs, DDIR_READ, out); - /* Log Write Status */ - show_ddir_status_terse(ts, rs, DDIR_WRITE, out); - /* Log Trim Status */ - show_ddir_status_terse(ts, rs, DDIR_TRIM, out); - - /* CPU Usage */ - if (ts->total_run_time) { - double runt = (double) ts->total_run_time; - - usr_cpu = (double) ts->usr_time * 100 / runt; - sys_cpu = (double) ts->sys_time * 100 / runt; - } else { - usr_cpu = 0; - sys_cpu = 0; - } - - log_buf(out, ";%f%%;%f%%;%llu;%llu;%llu", usr_cpu, sys_cpu, - (unsigned long long) ts->ctx, - (unsigned long long) ts->majf, - (unsigned long long) ts->minf); - - /* Calc % distribution of IO depths, usecond, msecond latency */ - stat_calc_dist(ts->io_u_map, ddir_rw_sum(ts->total_io_u), io_u_dist); - stat_calc_lat_nu(ts, io_u_lat_u); - stat_calc_lat_m(ts, io_u_lat_m); - - /* Only show fixed 7 I/O depth levels*/ - log_buf(out, ";%3.1f%%;%3.1f%%;%3.1f%%;%3.1f%%;%3.1f%%;%3.1f%%;%3.1f%%", - io_u_dist[0], io_u_dist[1], io_u_dist[2], io_u_dist[3], - io_u_dist[4], io_u_dist[5], io_u_dist[6]); - - /* Microsecond latency */ - for (i = 0; i < FIO_IO_U_LAT_U_NR; i++) - log_buf(out, ";%3.2f%%", io_u_lat_u[i]); - /* Millisecond latency */ - for (i = 0; i < FIO_IO_U_LAT_M_NR; i++) - log_buf(out, ";%3.2f%%", io_u_lat_m[i]); - /* Additional output if continue_on_error set - default off*/ - if (ts->continue_on_error) - log_buf(out, ";%llu;%d", (unsigned long long) ts->total_err_count, ts->first_error); - log_buf(out, "\n"); - - /* Additional output if description is set */ - if (strlen(ts->description)) - log_buf(out, ";%s", ts->description); - - log_buf(out, "\n"); -} - -static void show_thread_status_terse_v3_v4(struct thread_stat *ts, - struct group_run_stats *rs, int ver, - struct buf_output *out) -{ - double io_u_dist[FIO_IO_U_MAP_NR]; - double io_u_lat_u[FIO_IO_U_LAT_U_NR]; - double io_u_lat_m[FIO_IO_U_LAT_M_NR]; - double usr_cpu, sys_cpu; - int i; + if (ver == 2) + log_buf(out, "2;%s;%d;%d", ts->name, ts->groupid, ts->error); + else + log_buf(out, "%d;%s;%s;%d;%d", ver, fio_version_string, + ts->name, ts->groupid, ts->error); - /* General Info */ - log_buf(out, "%d;%s;%s;%d;%d", ver, fio_version_string, - ts->name, ts->groupid, ts->error); /* Log Read Status */ - show_ddir_status_terse(ts, rs, DDIR_READ, out); + show_ddir_status_terse(ts, rs, DDIR_READ, ver, out); /* Log Write Status */ - show_ddir_status_terse(ts, rs, DDIR_WRITE, out); + show_ddir_status_terse(ts, rs, DDIR_WRITE, ver, out); /* Log Trim Status */ - if (ver == 4) - show_ddir_status_terse(ts, rs, DDIR_TRIM, out); + if (ver == 2 || ver == 4 || ver == 5) + show_ddir_status_terse(ts, rs, DDIR_TRIM, ver, out); /* CPU Usage */ if (ts->total_run_time) { @@ -1187,11 +1142,14 @@ static void show_thread_status_terse_v3_v4(struct thread_stat *ts, log_buf(out, ";%3.2f%%", io_u_lat_m[i]); /* disk util stats, if any */ - show_disk_util(1, NULL, out); + if (ver >= 3) + show_disk_util(1, NULL, out); /* Additional output if continue_on_error set - default off*/ if (ts->continue_on_error) log_buf(out, ";%llu;%d", (unsigned long long) ts->total_err_count, ts->first_error); + if (ver == 2) + log_buf(out, "\n"); /* Additional output if description is set */ if (strlen(ts->description)) @@ -1432,10 +1390,8 @@ static void show_thread_status_terse(struct thread_stat *ts, struct group_run_stats *rs, struct buf_output *out) { - if (terse_version == 2) - show_thread_status_terse_v2(ts, rs, out); - else if (terse_version == 3 || terse_version == 4) - show_thread_status_terse_v3_v4(ts, rs, terse_version, out); + if (terse_version >= 2 && terse_version <= 5) + show_thread_status_terse_all(ts, rs, terse_version, out); else log_err("fio: bad terse version!? %d\n", terse_version); }