#include "fio.h"
-static char run_str[MAX_JOBS + 1];
+static char run_str[REAL_MAX_JOBS + 1];
/*
* Sets the status of the 'td' in the printed status map.
break;
case TD_RUNNING:
if (td_rw(td)) {
- if (td_random(td))
- c = 'm';
- else
- c = 'M';
+ if (td_random(td)) {
+ if (td->o.rwmix[DDIR_READ] == 100)
+ c = 'r';
+ else if (td->o.rwmix[DDIR_WRITE] == 100)
+ c = 'w';
+ else
+ c = 'm';
+ } else {
+ if (td->o.rwmix[DDIR_READ] == 100)
+ c = 'R';
+ else if (td->o.rwmix[DDIR_WRITE] == 100)
+ c = 'W';
+ else
+ c = 'M';
+ }
} else if (td_read(td)) {
if (td_random(td))
c = 'r';
bytes_total = td->total_io_size;
+ if (td->o.fill_device && td->o.size == -1ULL) {
+ if (!td->fill_device_size || td->fill_device_size == -1ULL)
+ return 0;
+
+ bytes_total = td->fill_device_size;
+ }
+
/*
* if writing, bytes_total will be twice the size. If mixing,
* assume a 50/50 split and thus bytes_total will be 50% larger.
if (td->o.zone_size && td->o.zone_skip)
bytes_total /= (td->o.zone_skip / td->o.zone_size);
- if (td->o.fill_device && td->o.size == -1ULL)
- return 0;
-
if (td->runstate == TD_RUNNING || td->runstate == TD_VERIFYING) {
double perc, perc_t;
* if given, otherwise assume it'll run at the specified rate.
*/
if (td->o.timeout) {
- t_eta = td->o.timeout + td->o.start_delay;
+ t_eta = td->o.timeout + td->o.start_delay +
+ td->o.ramp_time;
if (in_ramp_time(td)) {
unsigned long ramp_left;
- ramp_left = mtime_since_now(&td->start);
+ ramp_left = mtime_since_now(&td->epoch);
ramp_left = (ramp_left + 999) / 1000;
if (ramp_left <= t_eta)
t_eta -= ramp_left;
}
disp_time = mtime_since(&disp_prev_time, &now);
- if (disp_time < 1000)
+
+ /*
+ * Allow a little slack, the target is to print it every 1000 msecs
+ */
+ if (disp_time < 900)
return;
calc_rate(disp_time, io_bytes, disp_io_bytes, rate);
fflush(stdout);
}
-void print_status_init(int thread_number)
+void print_status_init(int thr_number)
{
- run_str[thread_number] = 'P';
+ run_str[thr_number] = 'P';
}