From: Jens Axboe Date: Fri, 22 Feb 2013 19:48:56 +0000 (+0100) Subject: Add --eta-newline option X-Git-Tag: fio-2.0.15~57^2 X-Git-Url: https://git.kernel.dk/?p=fio.git;a=commitdiff_plain;h=e382e661f6a67a24d8042b9e4b8f812b7126bdc4;hp=2cf37420c461fb96b187928581dabf56f7456073 Add --eta-newline option For certain situations, it's handy to force a new line in the ETA output. It allows you to easily track what happened, without having to do detailed logging. Signed-off-by: Jens Axboe --- diff --git a/README b/README index 4f796e30..b662e714 100644 --- a/README +++ b/README @@ -152,6 +152,7 @@ $ fio writes --eta=when When ETA estimate should be printed May be "always", "never" or "auto" + --eta-newline=time Force a new line for every 'time' period passed --section=name Only run specified section in job file. Multiple sections can be specified. --alloc-size=kb Set smalloc pool to this size in kb (def 1024) diff --git a/eta.c b/eta.c index 5ef31c69..f90d4281 100644 --- a/eta.c +++ b/eta.c @@ -422,12 +422,13 @@ int calc_thread_status(struct jobs_eta *je, int force) je->nr_threads = thread_number; memcpy(je->run_str, run_str, thread_number * sizeof(char)); - return 1; } void display_thread_status(struct jobs_eta *je) { + static struct timeval disp_eta_new_line; + static int eta_new_line_init, eta_new_line_pending; static int linelen_last; static int eta_good; char output[REAL_MAX_JOBS + 512], *p = output; @@ -439,6 +440,11 @@ void display_thread_status(struct jobs_eta *je) eta_to_str(eta_str, je->eta_sec); } + if (eta_new_line_pending) { + eta_new_line_pending = 0; + p += sprintf(p, "\n"); + } + p += sprintf(p, "Jobs: %d (f=%d)", je->nr_running, je->files_open); if (je->m_rate || je->t_rate) { char *tr, *mr; @@ -492,6 +498,16 @@ void display_thread_status(struct jobs_eta *je) p += sprintf(p, "\r"); printf("%s", output); + + if (!eta_new_line_init) { + fio_gettime(&disp_eta_new_line, NULL); + eta_new_line_init = 1; + } else if (eta_new_line && + mtime_since_now(&disp_eta_new_line) > eta_new_line * 1000) { + fio_gettime(&disp_eta_new_line, NULL); + eta_new_line_pending = 1; + } + fflush(stdout); } diff --git a/fio.h b/fio.h index 43f48543..d7eb6dea 100644 --- a/fio.h +++ b/fio.h @@ -594,6 +594,7 @@ extern unsigned long long mlock_size; extern uintptr_t page_mask, page_size; extern int read_only; extern int eta_print; +extern int eta_new_line; extern unsigned long done_secs; extern char *job_section; extern int fio_gtod_offload; diff --git a/init.c b/init.c index 4709ff29..32da42c5 100644 --- a/init.c +++ b/init.c @@ -41,6 +41,7 @@ struct thread_data *threads = NULL; int exitall_on_terminate = 0; int output_format = FIO_OUTPUT_NORMAL; int eta_print = FIO_ETA_AUTO; +int eta_new_line = 0; unsigned long long mlock_size = 0; FILE *f_out = NULL; FILE *f_err = NULL; @@ -139,6 +140,11 @@ static struct option l_opts[FIO_NR_OPTIONS] = { .has_arg = required_argument, .val = 'e' | FIO_CLIENT_FLAG, }, + { + .name = (char *) "eta-newline", + .has_arg = required_argument, + .val = 'E' | FIO_CLIENT_FLAG, + }, { .name = (char *) "debug", .has_arg = required_argument, @@ -1264,6 +1270,8 @@ static void usage(const char *name) printf(" --showcmd\t\tTurn a job file into command line options\n"); printf(" --eta=when\t\tWhen ETA estimate should be printed\n"); printf(" \t\tMay be \"always\", \"never\" or \"auto\"\n"); + printf(" --eta-newline=time\tForce a new line for every 'time'"); + printf(" period passed\n"); printf(" --readonly\t\tTurn on safety read-only checks, preventing" " writes\n"); printf(" --section=name\tOnly run specified section in job file\n"); @@ -1505,6 +1513,17 @@ int parse_cmd_line(int argc, char *argv[]) else if (!strcmp("never", optarg)) eta_print = FIO_ETA_NEVER; break; + case 'E': { + long long t = 0; + + if (str_to_decimal(optarg, &t, 0, NULL)) { + log_err("fio: failed parsing eta time %s\n", optarg); + exit_val = 1; + do_exit++; + } + eta_new_line = t; + break; + } case 'd': if (set_debug(optarg)) do_exit++;