projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
stat: don't add duplicate clat entries for json
[fio.git]
/
eta.c
diff --git
a/eta.c
b/eta.c
index 1b0b000df115d4b04ff0ed614d3f9a8660e7abfb..0b795263325bbef5372cfb8a6760ed3b089da521 100644
(file)
--- a/
eta.c
+++ b/
eta.c
@@
-9,7
+9,7
@@
#include "lib/pow2.h"
static char __run_str[REAL_MAX_JOBS + 1];
#include "lib/pow2.h"
static char __run_str[REAL_MAX_JOBS + 1];
-static char run_str[__THREAD_RUNSTR_SZ(REAL_MAX_JOBS)];
+static char run_str[__THREAD_RUNSTR_SZ(REAL_MAX_JOBS)
+ 1
];
static void update_condensed_str(char *rstr, char *run_str_condensed)
{
static void update_condensed_str(char *rstr, char *run_str_condensed)
{
@@
-347,6
+347,14
@@
static void calc_iops(int unified_rw_rep, unsigned long mtime,
}
}
}
}
+/*
+ * Allow a little slack - if we're within 95% of the time, allow ETA.
+ */
+bool eta_time_within_slack(unsigned int time)
+{
+ return time > ((eta_interval_msec * 95) / 100);
+}
+
/*
* Print status of the jobs we know about. This includes rate estimates,
* ETA, thread state, etc.
/*
* Print status of the jobs we know about. This includes rate estimates,
* ETA, thread state, etc.
@@
-489,10
+497,7
@@
bool calc_thread_status(struct jobs_eta *je, int force)
disp_time = mtime_since(&disp_prev_time, &now);
disp_time = mtime_since(&disp_prev_time, &now);
- /*
- * Allow a little slack, the target is to print it every 1000 msecs
- */
- if (!force && disp_time < 900)
+ if (!force && !eta_time_within_slack(disp_time))
return false;
calc_rate(unified_rw_rep, disp_time, io_bytes, disp_io_bytes, je->rate);
return false;
calc_rate(unified_rw_rep, disp_time, io_bytes, disp_io_bytes, je->rate);
@@
-515,7
+520,7
@@
void display_thread_status(struct jobs_eta *je)
static int eta_new_line_init, eta_new_line_pending;
static int linelen_last;
static int eta_good;
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;
+ char output[
__THREAD_RUNSTR_SZ(REAL_MAX_JOBS)
+ 512], *p = output;
char eta_str[128];
double perc = 0.0;
char eta_str[128];
double perc = 0.0;
@@
-526,6
+531,7
@@
void display_thread_status(struct jobs_eta *je)
if (eta_new_line_pending) {
eta_new_line_pending = 0;
if (eta_new_line_pending) {
eta_new_line_pending = 0;
+ linelen_last = 0;
p += sprintf(p, "\n");
}
p += sprintf(p, "\n");
}
@@
-559,6
+565,7
@@
void display_thread_status(struct jobs_eta *je)
size_t left;
int l;
int ddir;
size_t left;
int l;
int ddir;
+ int linelen;
if ((!je->eta_sec && !eta_good) || je->nr_ramp == je->nr_running ||
je->eta_sec == -1)
if ((!je->eta_sec && !eta_good) || je->nr_ramp == je->nr_running ||
je->eta_sec == -1)
@@
-596,10
+603,14
@@
void display_thread_status(struct jobs_eta *je)
rate_str[DDIR_READ], rate_str[DDIR_WRITE],
iops_str[DDIR_READ], iops_str[DDIR_WRITE],
eta_str);
rate_str[DDIR_READ], rate_str[DDIR_WRITE],
iops_str[DDIR_READ], iops_str[DDIR_WRITE],
eta_str);
+ /* If truncation occurred adjust l so p is on the null */
+ if (l >= left)
+ l = left - 1;
p += l;
p += l;
- if (l >= 0 && l < linelen_last)
- p += sprintf(p, "%*s", linelen_last - l, "");
- linelen_last = l;
+ linelen = p - output;
+ if (l >= 0 && linelen < linelen_last)
+ p += sprintf(p, "%*s", linelen_last - linelen, "");
+ linelen_last = linelen;
for (ddir = 0; ddir < DDIR_RWDIR_CNT; ddir++) {
free(rate_str[ddir]);
for (ddir = 0; ddir < DDIR_RWDIR_CNT; ddir++) {
free(rate_str[ddir]);