X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=stat.c;h=2400cd70f04c49a5d2ba74e3d6fa590c5ae2e65c;hb=068420271828b3b2426ffc3ccf64404cb9d340fb;hp=19b36961aa4854f0e3fb27a692b04ed5f52cb9e9;hpb=72c27ff8f2eaf945ae34776dab4da3fee753707d;p=fio.git diff --git a/stat.c b/stat.c index 19b36961..2400cd70 100644 --- a/stat.c +++ b/stat.c @@ -628,11 +628,6 @@ static void show_ddir_status_terse(struct thread_stat *ts, else log_info(";%lu;%lu;%f;%f", 0UL, 0UL, 0.0, 0.0); - if (calc_lat(&ts->lat_stat[ddir], &min, &max, &mean, &dev)) - log_info(";%lu;%lu;%f;%f", min, max, mean, dev); - else - log_info(";%lu;%lu;%f;%f", 0UL, 0UL, 0.0, 0.0); - if (ts->clat_percentiles) { len = calc_clat_percentiles(ts->io_u_plat[ddir], ts->clat_stat[ddir].samples, @@ -648,6 +643,12 @@ static void show_ddir_status_terse(struct thread_stat *ts, } log_info(";%2.2f%%=%u", ts->percentile_list[i].u.f, ovals[i]); } + + if (calc_lat(&ts->lat_stat[ddir], &min, &max, &mean, &dev)) + log_info(";%lu;%lu;%f;%f", min, max, mean, dev); + else + log_info(";%lu;%lu;%f;%f", 0UL, 0UL, 0.0, 0.0); + if (ovals) free(ovals); @@ -660,10 +661,68 @@ static void show_ddir_status_terse(struct thread_stat *ts, log_info(";%lu;%lu;%f%%;%f;%f", 0UL, 0UL, 0.0, 0.0, 0.0); } +static void show_thread_status_terse_v2(struct thread_stat *ts, + struct group_run_stats *rs) +{ + 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; + + /* General Info */ + log_info("2;%s;%d;%d", ts->name, ts->groupid, ts->error); + /* Log Read Status */ + show_ddir_status_terse(ts, rs, 0); + /* Log Write Status */ + show_ddir_status_terse(ts, rs, 1); + + /* 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_info(";%f%%;%f%%;%lu;%lu;%lu", usr_cpu, sys_cpu, ts->ctx, ts->majf, + ts->minf); + + /* Calc % distribution of IO depths, usecond, msecond latency */ + stat_calc_dist(ts->io_u_map, ts_total_io_u(ts), io_u_dist); + stat_calc_lat_u(ts, io_u_lat_u); + stat_calc_lat_m(ts, io_u_lat_m); + + /* Only show fixed 7 I/O depth levels*/ + log_info(";%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_info(";%3.2f%%", io_u_lat_u[i]); + /* Millisecond latency */ + for (i = 0; i < FIO_IO_U_LAT_M_NR; i++) + log_info(";%3.2f%%", io_u_lat_m[i]); + /* Additional output if continue_on_error set - default off*/ + if (ts->continue_on_error) + log_info(";%lu;%d", ts->total_err_count, ts->first_error); + log_info("\n"); + + /* Additional output if description is set */ + if (ts->description) + log_info(";%s", ts->description); + + log_info("\n"); +} + #define FIO_TERSE_VERSION "3" -static void show_thread_status_terse(struct thread_stat *ts, - struct group_run_stats *rs) +static void show_thread_status_terse_v3(struct thread_stat *ts, + struct group_run_stats *rs) { double io_u_dist[FIO_IO_U_MAP_NR]; double io_u_lat_u[FIO_IO_U_LAT_U_NR]; @@ -723,6 +782,17 @@ static void show_thread_status_terse(struct thread_stat *ts, log_info(";%s", ts->description); } +static void show_thread_status_terse(struct thread_stat *ts, + struct group_run_stats *rs) +{ + if (terse_version == 2) + show_thread_status_terse_v2(ts, rs); + else if (terse_version == 3) + show_thread_status_terse_v3(ts, rs); + else + log_err("fio: bad terse version!? %d\n", terse_version); +} + static void sum_stat(struct io_stat *dst, struct io_stat *src, int nr) { double mean, S;