X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=eta.c;h=9a9f658b1969bbbc328c87c44913d6ce78b22019;hp=625b1f885e9899ea1e4d49639d73c14dcac6ec48;hb=3baddf2450d811be658fb47ef883ee84478dc352;hpb=0dd8377ff92f2cfb6670061782e28fd52d89a52f diff --git a/eta.c b/eta.c index 625b1f88..9a9f658b 100644 --- a/eta.c +++ b/eta.c @@ -17,47 +17,47 @@ static void check_str_update(struct thread_data *td) char c = run_str[td->thread_number - 1]; switch (td->runstate) { - case TD_REAPED: - c = '_'; - break; - case TD_EXITED: - c = 'E'; - break; - case TD_RUNNING: - if (td_rw(td)) { - if (td_random(td)) - c = 'm'; - else - c = 'M'; - } else if (td_read(td)) { - if (td_random(td)) - c = 'r'; - else - c = 'R'; - } else { - if (td_random(td)) - c = 'w'; - else - c = 'W'; - } - break; - case TD_VERIFYING: - c = 'V'; - break; - case TD_FSYNCING: - c = 'F'; - break; - case TD_CREATED: - c = 'C'; - break; - case TD_INITIALIZED: - c = 'I'; - break; - case TD_NOT_CREATED: - c = 'P'; - break; - default: - log_err("state %d\n", td->runstate); + case TD_REAPED: + c = '_'; + break; + case TD_EXITED: + c = 'E'; + break; + case TD_RUNNING: + if (td_rw(td)) { + if (td_random(td)) + c = 'm'; + else + c = 'M'; + } else if (td_read(td)) { + if (td_random(td)) + c = 'r'; + else + c = 'R'; + } else { + if (td_random(td)) + c = 'w'; + else + c = 'W'; + } + break; + case TD_VERIFYING: + c = 'V'; + break; + case TD_FSYNCING: + c = 'F'; + break; + case TD_CREATED: + c = 'C'; + break; + case TD_INITIALIZED: + c = 'I'; + break; + case TD_NOT_CREATED: + c = 'P'; + break; + default: + log_err("state %d\n", td->runstate); } run_str[td->thread_number - 1] = c; @@ -176,7 +176,7 @@ static void calc_rate(unsigned long mtime, unsigned long long *io_bytes, prev_io_bytes[0] = io_bytes[0]; prev_io_bytes[1] = io_bytes[1]; } - + /* * Print status of the jobs we know about. This includes rate estimates, * ETA, thread state, etc. @@ -197,8 +197,12 @@ void print_thread_status(void) static unsigned long long disp_io_bytes[2]; static struct timeval rate_prev_time, disp_prev_time; static unsigned int rate[2]; + static int linelen_last; - if (temp_stall_ts || terse_output) + if (temp_stall_ts || terse_output || eta_print == FIO_ETA_NEVER) + return; + + if (!isatty(STDOUT_FILENO) && (eta_print != FIO_ETA_ALWAYS)) return; if (!rate_io_bytes[0] && !rate_io_bytes[1]) @@ -262,7 +266,7 @@ void print_thread_status(void) fio_gettime(&now, NULL); rate_time = mtime_since(&rate_prev_time, &now); - if (write_bw_log && rate_time> bw_avg_time) { + if (write_bw_log && rate_time > bw_avg_time) { calc_rate(rate_time, io_bytes, rate_io_bytes, rate); memcpy(&rate_prev_time, &now, sizeof(now)); add_agg_sample(rate[DDIR_READ], DDIR_READ); @@ -285,8 +289,14 @@ void print_thread_status(void) else if (m_iops || t_iops) printf(", CR=%d/%d IOPS", t_iops, m_iops); if (eta_sec != INT_MAX && nr_running) { + int ll; + perc *= 100.0; - printf(": [%s] [%3.1f%% done] [%6u/%6u kb/s] [eta %s]", run_str, perc, rate[0], rate[1], eta_str); + ll = printf(": [%s] [%3.1f%% done] [%6u/%6u kb/s] [eta %s]", + run_str, perc, rate[0], rate[1], eta_str); + if (ll >= 0 && ll < linelen_last) + printf("%*s", linelen_last - ll, ""); + linelen_last = ll; } printf("\r"); fflush(stdout);