X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=stat.c;h=34c8fceefc2982199ada1a613e535f4cae54343f;hp=0c2e01b4f3baaf3975ab8c4a5953a7bbc66b60aa;hb=ea2accc50fe911f7c24f08e62db55de4d2386b71;hpb=30061b974a501c5cdfd84ab21b98d990455c84f8 diff --git a/stat.c b/stat.c index 0c2e01b4..34c8fcee 100644 --- a/stat.c +++ b/stat.c @@ -146,6 +146,20 @@ static void stat_calc_lat(struct thread_stat *ts, double *io_u_lat) } } +static int usec_to_msec(unsigned long *min, unsigned long *max, double *mean, + double *dev) +{ + if (*min > 1000 && *max > 1000 && *mean > 1000.0 && *dev > 1000.0) { + *min /= 1000; + *max /= 1000; + *mean /= 1000.0; + *dev /= 1000.0; + return 0; + } + + return 1; +} + static void show_ddir_status(struct group_run_stats *rs, struct thread_stat *ts, int ddir) { @@ -170,12 +184,22 @@ static void show_ddir_status(struct group_run_stats *rs, struct thread_stat *ts, free(bw_p); free(iops_p); - if (calc_lat(&ts->slat_stat[ddir], &min, &max, &mean, &dev)) - log_info(" slat (msec): min=%5lu, max=%5lu, avg=%5.02f, stdev=%5.02f\n", min, max, mean, dev); + if (calc_lat(&ts->slat_stat[ddir], &min, &max, &mean, &dev)) { + const char *base = "(usec)"; - if (calc_lat(&ts->clat_stat[ddir], &min, &max, &mean, &dev)) - log_info(" clat (msec): min=%5lu, max=%5lu, avg=%5.02f, stdev=%5.02f\n", min, max, mean, dev); + if (!usec_to_msec(&min, &max, &mean, &dev)) + base = "(msec)"; + + log_info(" slat %s: min=%5lu, max=%5lu, avg=%5.02f, stdev=%5.02f\n", base, min, max, mean, dev); + } + if (calc_lat(&ts->clat_stat[ddir], &min, &max, &mean, &dev)) { + const char *base = "(usec)"; + + if (!usec_to_msec(&min, &max, &mean, &dev)) + base = "(msec)"; + log_info(" clat %s: min=%5lu, max=%5lu, avg=%5.02f, stdev=%5.02f\n", base, min, max, mean, dev); + } if (calc_lat(&ts->bw_stat[ddir], &min, &max, &mean, &dev)) { double p_of_agg; @@ -227,8 +251,9 @@ static void show_thread_status(struct thread_stat *ts, log_info(" IO depths : 1=%3.1f%%, 2=%3.1f%%, 4=%3.1f%%, 8=%3.1f%%, 16=%3.1f%%, 32=%3.1f%%, >=64=%3.1f%%\n", 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]); log_info(" issued r/w: total=%lu/%lu, short=%lu/%lu\n", ts->total_io_u[0], ts->total_io_u[1], ts->short_io_u[0], ts->short_io_u[1]); - log_info(" lat (msec): 2=%3.2f%%, 4=%3.2f%%, 10=%3.2f%%, 20=%3.2f%%, 50=%3.2f%%, 100=%3.2f%%\n", io_u_lat[0], io_u_lat[1], io_u_lat[2], io_u_lat[3], io_u_lat[4], io_u_lat[5]); - log_info(" lat (msec): 250=%3.2f%%, 500=%3.2f%%, 750=%3.2f%%, 1000=%3.2f%%, >=2000=%3.2f%%\n", io_u_lat[6], io_u_lat[7], io_u_lat[8], io_u_lat[9], io_u_lat[10]); + log_info(" lat (msec): 2=%3.2f%%, 4=%3.2f%%, 10=%3.2f%%, 20=%3.2f%%, 50=%3.2f%%\n", io_u_lat[0], io_u_lat[1], io_u_lat[2], io_u_lat[3], io_u_lat[4]); + log_info(" lat (msec): 100=%3.2f%%, 250=%3.2f%%, 500=%3.2f%%, 750=%3.2f%%\n", io_u_lat[5], io_u_lat[6], io_u_lat[7], io_u_lat[8]); + log_info(" lat (msec): 1000=%3.2f%%, 2000=%3.2f%%, >=2000=%3.2f%%\n", io_u_lat[9], io_u_lat[10], io_u_lat[11]); } static void show_ddir_status_terse(struct thread_stat *ts, @@ -551,25 +576,25 @@ void add_agg_sample(unsigned long val, enum fio_ddir ddir) } void add_clat_sample(struct thread_data *td, enum fio_ddir ddir, - unsigned long msec) + unsigned long usec) { struct thread_stat *ts = &td->ts; - add_stat_sample(&ts->clat_stat[ddir], msec); + add_stat_sample(&ts->clat_stat[ddir], usec); if (ts->clat_log) - add_log_sample(td, ts->clat_log, msec, ddir); + add_log_sample(td, ts->clat_log, usec, ddir); } void add_slat_sample(struct thread_data *td, enum fio_ddir ddir, - unsigned long msec) + unsigned long usec) { struct thread_stat *ts = &td->ts; - add_stat_sample(&ts->slat_stat[ddir], msec); + add_stat_sample(&ts->slat_stat[ddir], usec); if (ts->slat_log) - add_log_sample(td, ts->slat_log, msec, ddir); + add_log_sample(td, ts->slat_log, usec, ddir); } void add_bw_sample(struct thread_data *td, enum fio_ddir ddir,