Fio 2.16
[fio.git] / eta.c
diff --git a/eta.c b/eta.c
index c2c9d4e8fb79bb9cc74abe0cad0294f30b426c5e..19afad5b04293df75201ee00914a862964f78b20 100644 (file)
--- a/eta.c
+++ b/eta.c
@@ -225,7 +225,11 @@ static unsigned long thread_eta(struct thread_data *td)
                        }
                }
 
-               eta_sec = (unsigned long) (elapsed * (1.0 / perc)) - elapsed;
+               if (perc == 0.0) {
+                       eta_sec = timeout;
+               } else {
+                       eta_sec = (unsigned long) (elapsed * (1.0 / perc)) - elapsed;
+               }
 
                if (td->o.timeout &&
                    eta_sec > (timeout + done_secs - elapsed))
@@ -247,7 +251,10 @@ static unsigned long thread_eta(struct thread_data *td)
                        uint64_t start_delay = td->o.start_delay;
                        uint64_t ramp_time = td->o.ramp_time;
 
-                       t_eta = __timeout + start_delay + ramp_time;
+                       t_eta = __timeout + start_delay;
+                       if (!td->ramp_time_over) {
+                               t_eta += ramp_time;
+                       }
                        t_eta /= 1000000ULL;
 
                        if ((td->runstate == TD_RAMP) && in_ramp_time(td)) {
@@ -259,9 +266,16 @@ static unsigned long thread_eta(struct thread_data *td)
                                        t_eta -= ramp_left;
                        }
                }
-               rate_bytes = ddir_rw_sum(td->o.rate);
+               rate_bytes = 0;
+               if (td_read(td))
+                       rate_bytes  = td->o.rate[DDIR_READ];
+               if (td_write(td))
+                       rate_bytes += td->o.rate[DDIR_WRITE];
+               if (td_trim(td))
+                       rate_bytes += td->o.rate[DDIR_TRIM];
+
                if (rate_bytes) {
-                       r_eta = (bytes_total / 1024) / rate_bytes;
+                       r_eta = bytes_total / rate_bytes;
                        r_eta += (td->o.start_delay / 1000000ULL);
                }
 
@@ -468,9 +482,9 @@ bool calc_thread_status(struct jobs_eta *je, int force)
                calc_rate(unified_rw_rep, rate_time, io_bytes, rate_io_bytes,
                                je->rate);
                memcpy(&rate_prev_time, &now, sizeof(now));
-               add_agg_sample(je->rate[DDIR_READ], DDIR_READ, 0);
-               add_agg_sample(je->rate[DDIR_WRITE], DDIR_WRITE, 0);
-               add_agg_sample(je->rate[DDIR_TRIM], DDIR_TRIM, 0);
+               add_agg_sample(sample_val(je->rate[DDIR_READ]), DDIR_READ, 0);
+               add_agg_sample(sample_val(je->rate[DDIR_WRITE]), DDIR_WRITE, 0);
+               add_agg_sample(sample_val(je->rate[DDIR_TRIM]), DDIR_TRIM, 0);
        }
 
        disp_time = mtime_since(&disp_prev_time, &now);