X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;ds=sidebyside;f=stat.c;h=143325aa1879680e2e09c5a18c13964b57661845;hb=57fc29faae372cb474b5f2ef921638ab28bb9dc0;hp=e1af59ed57dbb981dc9fbd1f3e9a69cb1275b7b3;hpb=1ec99eea970609e63f49982f0d052a23ac18848d;p=fio.git diff --git a/stat.c b/stat.c index e1af59ed..143325aa 100644 --- a/stat.c +++ b/stat.c @@ -59,15 +59,17 @@ static void show_group_stats(struct group_run_stats *rs, int id) log_info("\nRun status group %d (all jobs):\n", id); for (i = 0; i <= DDIR_WRITE; i++) { + const int i2p = is_power_of_2(rs->kb_base); + if (!rs->max_run[i]) continue; - p1 = num2str(rs->io_kb[i], 6, 1024, 1); - p2 = num2str(rs->agg[i], 6, 1024, 1); - p3 = num2str(rs->min_bw[i], 6, 1024, 1); - p4 = num2str(rs->max_bw[i], 6, 1024, 1); + p1 = num2str(rs->io_kb[i], 6, rs->kb_base, i2p); + p2 = num2str(rs->agg[i], 6, rs->kb_base, i2p); + p3 = num2str(rs->min_bw[i], 6, rs->kb_base, i2p); + p4 = num2str(rs->max_bw[i], 6, rs->kb_base, i2p); - log_info("%s: io=%siB, aggrb=%siB/s, minb=%siB/s, maxb=%siB/s," + log_info("%s: io=%sB, aggrb=%sB/s, minb=%sB/s, maxb=%sB/s," " mint=%llumsec, maxt=%llumsec\n", ddir_str[i], p1, p2, p3, p4, rs->min_run[i], rs->max_run[i]); @@ -153,20 +155,22 @@ static void show_ddir_status(struct group_run_stats *rs, struct thread_stat *ts, unsigned long long bw, iops; double mean, dev; char *io_p, *bw_p, *iops_p; + int i2p; if (!ts->runtime[ddir]) return; + i2p = is_power_of_2(rs->kb_base); runt = ts->runtime[ddir]; bw = (1000 * ts->io_bytes[ddir]) / runt; - io_p = num2str(ts->io_bytes[ddir] >> 10, 6, 1024, 1); - bw_p = num2str(bw >> 10, 6, 1024, 1); + io_p = num2str(ts->io_bytes[ddir], 6, 1, i2p); + bw_p = num2str(bw, 6, 1, i2p); iops = (1000 * ts->total_io_u[ddir]) / runt; iops_p = num2str(iops, 6, 1, 0); - log_info(" %s: io=%siB, bw=%siB/s, iops=%s, runt=%6lumsec\n", + log_info(" %s: io=%sB, bw=%sB/s, iops=%s, runt=%6lumsec\n", ddir_str[ddir], io_p, bw_p, iops_p, ts->runtime[ddir]); @@ -210,7 +214,7 @@ static void show_ddir_status(struct group_run_stats *rs, struct thread_stat *ts, double p_of_agg; p_of_agg = mean * 100 / (double) rs->agg[ddir]; - log_info(" bw (KiB/s) : min=%5lu, max=%5lu, per=%3.2f%%," + log_info(" bw (KB/s) : min=%5lu, max=%5lu, per=%3.2f%%," " avg=%5.02f, stdev=%5.02f\n", min, max, p_of_agg, mean, dev); } @@ -457,6 +461,7 @@ void show_run_stats(void) struct thread_data *td; struct thread_stat *threadstats, *ts; int i, j, k, l, nr_ts, last_ts, idx; + int kb_base_warned = 0; runstats = malloc(sizeof(struct group_run_stats) * (groupid + 1)); @@ -529,6 +534,12 @@ void show_run_stats(void) * first pid in group, not very useful... */ ts->pid = td->pid; + + ts->kb_base = td->o.kb_base; + } else if (ts->kb_base != td->o.kb_base && !kb_base_warned) { + log_info("fio: kb_base differs for jobs in group, using" + " %u as the base\n", ts->kb_base); + kb_base_warned = 1; } ts->continue_on_error = td->o.continue_on_error; @@ -590,6 +601,7 @@ void show_run_stats(void) ts = &threadstats[i]; rs = &runstats[ts->groupid]; + rs->kb_base = ts->kb_base; for (j = 0; j <= DDIR_WRITE; j++) { if (!ts->runtime[j]) @@ -603,7 +615,7 @@ void show_run_stats(void) if (ts->runtime[j]) { unsigned long runt; - runt = ts->runtime[j] * 1024 / 1000; + runt = ts->runtime[j]; bw = ts->io_bytes[j] / runt; } if (bw < rs->min_bw[j]) @@ -611,7 +623,7 @@ void show_run_stats(void) if (bw > rs->max_bw[j]) rs->max_bw[j] = bw; - rs->io_kb[j] += ts->io_bytes[j] >> 10; + rs->io_kb[j] += ts->io_bytes[j] / rs->kb_base; } } @@ -619,20 +631,20 @@ void show_run_stats(void) unsigned long max_run[2]; rs = &runstats[i]; - max_run[0] = rs->max_run[0] * 1024 / 1000; - max_run[1] = rs->max_run[1] * 1024 / 1000; + max_run[0] = rs->max_run[0]; + max_run[1] = rs->max_run[1]; if (rs->max_run[0]) - rs->agg[0] = (rs->io_kb[0]*1024) / max_run[0]; + rs->agg[0] = (rs->io_kb[0] * rs->kb_base) / max_run[0]; if (rs->max_run[1]) - rs->agg[1] = (rs->io_kb[1]*1024) / max_run[1]; + rs->agg[1] = (rs->io_kb[1] * rs->kb_base) / max_run[1]; } /* * don't overwrite last signal output */ if (!terse_output) - printf("\n"); + log_info("\n"); for (i = 0; i < nr_ts; i++) { ts = &threadstats[i]; @@ -740,7 +752,8 @@ void add_bw_sample(struct thread_data *td, enum fio_ddir ddir, unsigned int bs, if (spent < td->o.bw_avg_time) return; - rate = (td->this_io_bytes[ddir] - ts->stat_io_bytes[ddir]) * 1000 / spent / 1024; + rate = (td->this_io_bytes[ddir] - ts->stat_io_bytes[ddir]) * + 1000 / spent / 1024; add_stat_sample(&ts->bw_stat[ddir], rate); if (ts->bw_log)