summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--client.c1
-rw-r--r--eta.c24
-rw-r--r--fio.126
-rw-r--r--server.c1
-rw-r--r--server.h2
-rw-r--r--stat.h1
6 files changed, 31 insertions, 24 deletions
diff --git a/client.c b/client.c
index 685472e2..c1e516d5 100644
--- a/client.c
+++ b/client.c
@@ -846,6 +846,7 @@ static void convert_jobs_eta(struct jobs_eta *je)
je->elapsed_sec = le64_to_cpu(je->elapsed_sec);
je->eta_sec = le64_to_cpu(je->eta_sec);
je->nr_threads = le32_to_cpu(je->nr_threads);
+ je->is_pow2 = le32_to_cpu(je->is_pow2);
}
void fio_client_sum_jobs_eta(struct jobs_eta *dst, struct jobs_eta *je)
diff --git a/eta.c b/eta.c
index a068e1e9..34afe0ca 100644
--- a/eta.c
+++ b/eta.c
@@ -216,8 +216,14 @@ static int thread_eta(struct thread_data *td)
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];
}
@@ -248,7 +254,6 @@ int calc_thread_status(struct jobs_eta *je, int force)
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;
- int i2p = 0;
if (!force) {
if (temp_stall_ts || terse_output || eta_print == FIO_ETA_NEVER)
@@ -272,6 +277,8 @@ int calc_thread_status(struct jobs_eta *je, int force)
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
@@ -314,8 +321,6 @@ int calc_thread_status(struct jobs_eta *je, int force)
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];
@@ -366,7 +371,6 @@ void display_thread_status(struct jobs_eta *je)
char output[REAL_MAX_JOBS + 512], *p = output;
char eta_str[128];
double perc = 0.0;
- int i2p = 0;
if (je->eta_sec != INT_MAX && je->elapsed_sec) {
perc = (double) je->elapsed_sec / (double) (je->elapsed_sec + je->eta_sec);
@@ -377,8 +381,8 @@ void display_thread_status(struct jobs_eta *je)
if (je->m_rate[0] || je->m_rate[1] || je->t_rate[0] || je->t_rate[1]) {
char *tr, *mr;
- mr = num2str(je->m_rate[0] + je->m_rate[1], 4, 0, i2p);
- tr = num2str(je->t_rate[0] + je->t_rate[1], 4, 0, i2p);
+ mr = num2str(je->m_rate[0] + je->m_rate[1], 4, 0, je->is_pow2);
+ tr = num2str(je->t_rate[0] + je->t_rate[1], 4, 0, je->is_pow2);
p += sprintf(p, ", CR=%s/%s KB/s", tr, mr);
free(tr);
free(mr);
@@ -402,8 +406,8 @@ void display_thread_status(struct jobs_eta *je)
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);
diff --git a/fio.1 b/fio.1
index 10cb51d5..d94be335 100644
--- a/fio.1
+++ b/fio.1
@@ -70,7 +70,7 @@ Set the internal smalloc pool size to \fIkb\fP kilobytes.
All fio parser warnings are fatal, causing fio to exit with an error.
.TP
.BI \-\-max\-jobs \fR=\fPnr
-Set the maximum allowed number of jobs (threads/processes) to suport.
+Set the maximum allowed number of jobs (threads/processes) to support.
.TP
.BI \-\-server \fR=\fPargs
Start a backend server, with \fIargs\fP specifying what to listen to. See client/server section.
@@ -1324,46 +1324,46 @@ To start the server, you would do:
on that machine, where args defines what fio listens to. The arguments
are of the form 'type:hostname or IP:port'. 'type' is either 'ip' (or ip4)
-for TCP/IP v4, 'ip6' for TCP/IP v6, or 'sock' for a local unix domain socket.
-'hostname' is either a hostname or IP address, and 'port' is the port to
+for TCP/IP v4, 'ip6' for TCP/IP v6, or 'sock' for a local unix domain
+socket. 'hostname' is either a hostname or IP address, and 'port' is the port to
listen to (only valid for TCP/IP, not a local socket). Some examples:
-1) fio --server
+1) fio \-\-server
Start a fio server, listening on all interfaces on the default port (8765).
-2) fio --server=ip:hostname,4444
+2) fio \-\-server=ip:hostname,4444
Start a fio server, listening on IP belonging to hostname and on port 4444.
-3) fio --server=ip6:::1,4444
+3) fio \-\-server=ip6:::1,4444
Start a fio server, listening on IPv6 localhost ::1 and on port 4444.
-4) fio --server=,4444
+4) fio \-\-server=,4444
Start a fio server, listening on all interfaces on port 4444.
-5) fio --server=1.2.3.4
+5) fio \-\-server=1.2.3.4
Start a fio server, listening on IP 1.2.3.4 on the default port.
-6) fio --server=sock:/tmp/fio.sock
+6) fio \-\-server=sock:/tmp/fio.sock
Start a fio server, listening on the local socket /tmp/fio.sock.
When a server is running, you can connect to it from a client. The client
is run with:
-fio --local-args --client=server --remote-args <job file(s)>
+fio \-\-local-args \-\-client=server \-\-remote-args <job file(s)>
-where --local-args are arguments that are local to the client where it is
-running, 'server' is the connect string, and --remote-args and <job file(s)>
+where \-\-local-args are arguments that are local to the client where it is
+running, 'server' is the connect string, and \-\-remote-args and <job file(s)>
are sent to the server. The 'server' string follows the same format as it
does on the server side, to allow IP/hostname/socket and port strings.
You can connect to multiple clients as well, to do that you could run:
-fio --client=server2 --client=server2 <job file(s)>
+fio \-\-client=server2 \-\-client=server2 <job file(s)>
.SH AUTHORS
.B fio
diff --git a/server.c b/server.c
index 456c88c8..27356c67 100644
--- a/server.c
+++ b/server.c
@@ -671,6 +671,7 @@ static int handle_send_eta_cmd(struct fio_net_cmd *cmd)
je->elapsed_sec = cpu_to_le64(je->elapsed_sec);
je->eta_sec = cpu_to_le64(je->eta_sec);
je->nr_threads = cpu_to_le32(je->nr_threads);
+ je->is_pow2 = cpu_to_le32(je->is_pow2);
fio_net_send_cmd(server_fd, FIO_NET_CMD_ETA, je, size, &tag, NULL);
free(je);
diff --git a/server.h b/server.h
index b7ae7ee8..a838126f 100644
--- a/server.h
+++ b/server.h
@@ -38,7 +38,7 @@ struct fio_net_cmd_reply {
};
enum {
- FIO_SERVER_VER = 16,
+ FIO_SERVER_VER = 17,
FIO_SERVER_MAX_FRAGMENT_PDU = 1024,
diff --git a/stat.h b/stat.h
index cbbbf44a..d7184aab 100644
--- a/stat.h
+++ b/stat.h
@@ -183,6 +183,7 @@ struct jobs_eta {
uint32_t iops[2];
uint64_t elapsed_sec;
uint64_t eta_sec;
+ uint32_t is_pow2;
/*
* Network 'copy' of run_str[]