eta: calculate aggregate bw statistics even when eta is disabled
authorVincent Fu <vincent.fu@samsung.com>
Thu, 3 Aug 2023 00:53:21 +0000 (20:53 -0400)
committerVincent Fu <vincent.fu@samsung.com>
Thu, 3 Aug 2023 15:49:08 +0000 (11:49 -0400)
The --bandwidth-log command-line option instructs fio to generate
aggregate bandwidth log files. These measurements are recorded by the
code generating the eta status line. When eta is disabled the aggregate
bandwidth log measurements are not calculated. Change the eta code to
record the measurements even when eta is not needed.

eta is disabled under these conditions
- explicitly with --eta=never
- STDOUT is not a TTY (shell redirection, nohup, etc)
- output format excludes normal output

Fixes: https://github.com/axboe/fio/issues/1599
Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
eta.c

diff --git a/eta.c b/eta.c
index af4027e0e2997e9ae220fe2fe94da05ff1995121..cc3424613e360d5df1659d2cf86fccaf93de2f22 100644 (file)
--- a/eta.c
+++ b/eta.c
@@ -375,6 +375,22 @@ bool eta_time_within_slack(unsigned int time)
        return time > ((eta_interval_msec * 95) / 100);
 }
 
+/*
+ * These are the conditions under which we might be able to skip the eta
+ * calculation.
+ */
+static bool skip_eta()
+{
+       if (!(output_format & FIO_OUTPUT_NORMAL) && f_out == stdout)
+               return true;
+       if (temp_stall_ts || eta_print == FIO_ETA_NEVER)
+               return true;
+       if (!isatty(STDOUT_FILENO) && eta_print != FIO_ETA_ALWAYS)
+               return true;
+
+       return false;
+}
+
 /*
  * Print status of the jobs we know about. This includes rate estimates,
  * ETA, thread state, etc.
@@ -393,14 +409,12 @@ bool calc_thread_status(struct jobs_eta *je, int force)
        static unsigned long long disp_io_iops[DDIR_RWDIR_CNT];
        static struct timespec rate_prev_time, disp_prev_time;
 
-       if (!force) {
-               if (!(output_format & FIO_OUTPUT_NORMAL) &&
-                   f_out == stdout)
-                       return false;
-               if (temp_stall_ts || eta_print == FIO_ETA_NEVER)
-                       return false;
+       bool ret = true;
 
-               if (!isatty(STDOUT_FILENO) && (eta_print != FIO_ETA_ALWAYS))
+       if (!force && skip_eta()) {
+               if (write_bw_log)
+                       ret = false;
+               else
                        return false;
        }
 
@@ -534,7 +548,7 @@ bool calc_thread_status(struct jobs_eta *je, int force)
        je->nr_threads = thread_number;
        update_condensed_str(__run_str, run_str);
        memcpy(je->run_str, run_str, strlen(run_str));
-       return true;
+       return ret;
 }
 
 static int gen_eta_str(struct jobs_eta *je, char *p, size_t left,