Same fix as
033bbb51 essentially. Since mtime is a 1000th of a second,
for the usual option of having 1024 be the KB base, we end up being
off by 1.024 if we don't multiply by 1000 before dividing by the
runtime (and then dividing by 1024 to get to next power-of-2).
Signed-off-by: Jens Axboe <axboe@kernel.dk>
je->elapsed_sec = le64_to_cpu(je->elapsed_sec);
je->eta_sec = le64_to_cpu(je->eta_sec);
je->elapsed_sec = le64_to_cpu(je->elapsed_sec);
je->eta_sec = le64_to_cpu(je->eta_sec);
+ je->is_pow2 = le32_to_cpu(je->is_pow2);
}
static void sum_jobs_eta(struct jobs_eta *dst, struct jobs_eta *je)
}
static void sum_jobs_eta(struct jobs_eta *dst, struct jobs_eta *je)
static void calc_rate(unsigned long mtime, unsigned long long *io_bytes,
unsigned long long *prev_io_bytes, unsigned int *rate)
{
static void calc_rate(unsigned long mtime, unsigned long long *io_bytes,
unsigned long long *prev_io_bytes, unsigned int *rate)
{
- rate[0] = (io_bytes[0] - prev_io_bytes[0]) / mtime;
- rate[1] = (io_bytes[1] - prev_io_bytes[1]) / mtime;
+ int i;
+
+ for (i = 0; i <= DDIR_WRITE; i++) {
+ unsigned long long diff;
+
+ diff = io_bytes[i] - prev_io_bytes[i];
+ rate[i] = ((1000 * diff) / mtime) / 1024;
+ }
prev_io_bytes[0] = io_bytes[0];
prev_io_bytes[1] = io_bytes[1];
}
prev_io_bytes[0] = io_bytes[0];
prev_io_bytes[1] = io_bytes[1];
}
static unsigned long long disp_io_bytes[2];
static unsigned long long disp_io_iops[2];
static struct timeval rate_prev_time, disp_prev_time;
static unsigned long long disp_io_bytes[2];
static unsigned long long disp_io_iops[2];
static struct timeval rate_prev_time, disp_prev_time;
if (!force) {
if (temp_stall_ts || terse_output || eta_print == FIO_ETA_NEVER)
if (!force) {
if (temp_stall_ts || terse_output || eta_print == FIO_ETA_NEVER)
io_iops[0] = io_iops[1] = 0;
bw_avg_time = ULONG_MAX;
for_each_td(td, i) {
io_iops[0] = io_iops[1] = 0;
bw_avg_time = ULONG_MAX;
for_each_td(td, i) {
+ if (is_power_of_2(td->o.kb_base))
+ je->is_pow2 = 1;
if (td->o.bw_avg_time < bw_avg_time)
bw_avg_time = td->o.bw_avg_time;
if (td->runstate == TD_RUNNING || td->runstate == TD_VERIFYING
if (td->o.bw_avg_time < bw_avg_time)
bw_avg_time = td->o.bw_avg_time;
if (td->runstate == TD_RUNNING || td->runstate == TD_VERIFYING
je->eta_sec = 0;
for_each_td(td, i) {
je->eta_sec = 0;
for_each_td(td, i) {
- if (!i2p && is_power_of_2(td->o.kb_base))
- i2p = 1;
if (exitall_on_terminate) {
if (eta_secs[i] < je->eta_sec)
je->eta_sec = eta_secs[i];
if (exitall_on_terminate) {
if (eta_secs[i] < je->eta_sec)
je->eta_sec = eta_secs[i];
char output[REAL_MAX_JOBS + 512], *p = output;
char eta_str[128];
double perc = 0.0;
char output[REAL_MAX_JOBS + 512], *p = output;
char eta_str[128];
double perc = 0.0;
if (je->eta_sec != INT_MAX && je->elapsed_sec) {
perc = (double) je->elapsed_sec / (double) (je->elapsed_sec + je->eta_sec);
if (je->eta_sec != INT_MAX && je->elapsed_sec) {
perc = (double) je->elapsed_sec / (double) (je->elapsed_sec + je->eta_sec);
if (je->m_rate || je->t_rate) {
char *tr, *mr;
if (je->m_rate || je->t_rate) {
char *tr, *mr;
- mr = num2str(je->m_rate, 4, 0, i2p);
- tr = num2str(je->t_rate, 4, 0, i2p);
+ mr = num2str(je->m_rate, 4, 0, je->is_pow2);
+ tr = num2str(je->t_rate, 4, 0, je->is_pow2);
p += sprintf(p, ", CR=%s/%s KB/s", tr, mr);
free(tr);
free(mr);
p += sprintf(p, ", CR=%s/%s KB/s", tr, mr);
free(tr);
free(mr);
sprintf(perc_str, "%3.1f%% done", perc);
}
sprintf(perc_str, "%3.1f%% done", perc);
}
- rate_str[0] = num2str(je->rate[0], 5, 10, i2p);
- rate_str[1] = num2str(je->rate[1], 5, 10, i2p);
+ rate_str[0] = num2str(je->rate[0], 5, 1024, je->is_pow2);
+ rate_str[1] = num2str(je->rate[1], 5, 1024, je->is_pow2);
iops_str[0] = num2str(je->iops[0], 4, 1, 0);
iops_str[1] = num2str(je->iops[1], 4, 1, 0);
iops_str[0] = num2str(je->iops[0], 4, 1, 0);
iops_str[1] = num2str(je->iops[1], 4, 1, 0);
je->elapsed_sec = cpu_to_le64(je->elapsed_sec);
je->eta_sec = cpu_to_le64(je->eta_sec);
je->elapsed_sec = cpu_to_le64(je->elapsed_sec);
je->eta_sec = cpu_to_le64(je->eta_sec);
+ je->is_pow2 = cpu_to_le32(je->is_pow2);
fio_net_send_cmd(server_fd, FIO_NET_CMD_ETA, je, size, cmd->tag);
free(je);
fio_net_send_cmd(server_fd, FIO_NET_CMD_ETA, je, size, cmd->tag);
free(je);
FIO_SERVER_MAX_PDU = 1024,
FIO_SERVER_MAX_PDU = 1024,
uint32_t iops[2];
uint64_t elapsed_sec;
uint64_t eta_sec;
uint32_t iops[2];
uint64_t elapsed_sec;
uint64_t eta_sec;
/*
* Network 'copy' of run_str[]
/*
* Network 'copy' of run_str[]