diff options
-rw-r--r-- | client.c | 1 | ||||
-rw-r--r-- | eta.c | 24 | ||||
-rw-r--r-- | fio.1 | 26 | ||||
-rw-r--r-- | server.c | 1 | ||||
-rw-r--r-- | server.h | 2 | ||||
-rw-r--r-- | stat.h | 1 |
6 files changed, 31 insertions, 24 deletions
@@ -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) @@ -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); @@ -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 @@ -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); @@ -38,7 +38,7 @@ struct fio_net_cmd_reply { }; enum { - FIO_SERVER_VER = 16, + FIO_SERVER_VER = 17, FIO_SERVER_MAX_FRAGMENT_PDU = 1024, @@ -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[] |