X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=eta.c;h=fc0292f3d7ac6c2e9b4ef5da5ecd29397572a274;hp=53dcc93aa4d6b157d7d64037d34ad99526cb10ce;hb=eb7976ef27c1d9f69885b0c8db3020303999c9af;hpb=0b9d69ecb14045cf3b2622ae922756b9889b25e6 diff --git a/eta.c b/eta.c index 53dcc93a..fc0292f3 100644 --- a/eta.c +++ b/eta.c @@ -7,7 +7,7 @@ #include "fio.h" -static char run_str[MAX_JOBS + 1]; +static char run_str[REAL_MAX_JOBS + 1]; /* * Sets the status of the 'td' in the printed status map. @@ -28,10 +28,21 @@ static void check_str_update(struct thread_data *td) break; case TD_RUNNING: if (td_rw(td)) { - if (td_random(td)) - c = 'm'; - else - c = 'M'; + if (td_random(td)) { + if (td->o.rwmix[DDIR_READ] == 100) + c = 'r'; + else if (td->o.rwmix[DDIR_WRITE] == 100) + c = 'w'; + else + c = 'm'; + } else { + if (td->o.rwmix[DDIR_READ] == 100) + c = 'R'; + else if (td->o.rwmix[DDIR_WRITE] == 100) + c = 'W'; + else + c = 'M'; + } } else if (td_read(td)) { if (td_random(td)) c = 'r'; @@ -110,6 +121,13 @@ static int thread_eta(struct thread_data *td) bytes_total = td->total_io_size; + if (td->o.fill_device && td->o.size == -1ULL) { + if (!td->fill_device_size || td->fill_device_size == -1ULL) + return 0; + + bytes_total = td->fill_device_size; + } + /* * if writing, bytes_total will be twice the size. If mixing, * assume a 50/50 split and thus bytes_total will be 50% larger. @@ -124,9 +142,6 @@ static int thread_eta(struct thread_data *td) if (td->o.zone_size && td->o.zone_skip) bytes_total /= (td->o.zone_skip / td->o.zone_size); - if (td->o.fill_device && td->o.size == -1ULL) - return 0; - if (td->runstate == TD_RUNNING || td->runstate == TD_VERIFYING) { double perc, perc_t; @@ -157,12 +172,13 @@ static int thread_eta(struct thread_data *td) * if given, otherwise assume it'll run at the specified rate. */ if (td->o.timeout) { - t_eta = td->o.timeout + td->o.start_delay; + t_eta = td->o.timeout + td->o.start_delay + + td->o.ramp_time; if (in_ramp_time(td)) { unsigned long ramp_left; - ramp_left = mtime_since_now(&td->start); + ramp_left = mtime_since_now(&td->epoch); ramp_left = (ramp_left + 999) / 1000; if (ramp_left <= t_eta) t_eta -= ramp_left; @@ -233,6 +249,7 @@ void print_thread_status(void) static unsigned int rate[2], iops[2]; static int linelen_last; static int eta_good; + char output[512], *p = output; int i2p = 0; if (temp_stall_ts || terse_output || eta_print == FIO_ETA_NEVER) @@ -324,7 +341,11 @@ void print_thread_status(void) } disp_time = mtime_since(&disp_prev_time, &now); - if (disp_time < 1000) + + /* + * Allow a little slack, the target is to print it every 1000 msecs + */ + if (disp_time < 900) return; calc_rate(disp_time, io_bytes, disp_io_bytes, rate); @@ -335,17 +356,17 @@ void print_thread_status(void) if (!nr_running && !nr_pending) return; - printf("Jobs: %d (f=%d)", nr_running, files_open); + p += sprintf(p, "Jobs: %d (f=%d)", nr_running, files_open); if (m_rate || t_rate) { char *tr, *mr; mr = num2str(m_rate, 4, 0, i2p); tr = num2str(t_rate, 4, 0, i2p); - printf(", CR=%s/%s KB/s", tr, mr); + p += sprintf(p, ", CR=%s/%s KB/s", tr, mr); free(tr); free(mr); } else if (m_iops || t_iops) - printf(", CR=%d/%d IOPS", t_iops, m_iops); + p += sprintf(p, ", CR=%d/%d IOPS", t_iops, m_iops); if (eta_sec != INT_MAX && nr_running) { char perc_str[32]; char *iops_str[2]; @@ -366,11 +387,12 @@ void print_thread_status(void) iops_str[0] = num2str(iops[0], 4, 1, 0); iops_str[1] = num2str(iops[1], 4, 1, 0); - l = printf(": [%s] [%s] [%s/%s /s] [%s/%s iops] [eta %s]", + l = sprintf(p, ": [%s] [%s] [%s/%s /s] [%s/%s iops] [eta %s]", run_str, perc_str, rate_str[0], rate_str[1], iops_str[0], iops_str[1], eta_str); + p += l; if (l >= 0 && l < linelen_last) - printf("%*s", linelen_last - l, ""); + p += sprintf(p, "%*s", linelen_last - l, ""); linelen_last = l; free(rate_str[0]); @@ -378,11 +400,16 @@ void print_thread_status(void) free(iops_str[0]); free(iops_str[1]); } - printf("\r"); - fflush(stdout); + p += sprintf(p, "\r"); + + if (!is_backend) { + printf("%s", output); + fflush(stdout); + } else + fio_server_text_output(output, p - output); } -void print_status_init(int thread_number) +void print_status_init(int thr_number) { - run_str[thread_number] = 'P'; + run_str[thr_number] = 'P'; }