* 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;
}
fio_gettime(&tv, NULL);
+ td->ts.runtime[0] = 0;
+ td->ts.runtime[1] = 0;
memcpy(&td->epoch, &tv, sizeof(tv));
memcpy(&td->start, &tv, sizeof(tv));
}
*/
static void *thread_main(void *data)
{
- unsigned long long runtime[2], elapsed;
+ unsigned long long elapsed;
struct thread_data *td = data;
pthread_condattr_t attr;
int clear_state;
fio_gettime(&td->epoch, NULL);
getrusage(RUSAGE_SELF, &td->ts.ru_start);
- runtime[0] = runtime[1] = 0;
clear_state = 0;
while (keep_running(td)) {
fio_gettime(&td->start, NULL);
if (td_read(td) && td->io_bytes[DDIR_READ]) {
elapsed = utime_since_now(&td->start);
- runtime[DDIR_READ] += elapsed;
+ td->ts.runtime[DDIR_READ] += elapsed;
}
if (td_write(td) && td->io_bytes[DDIR_WRITE]) {
elapsed = utime_since_now(&td->start);
- runtime[DDIR_WRITE] += elapsed;
+ td->ts.runtime[DDIR_WRITE] += elapsed;
}
if (td->error || td->terminate)
do_verify(td);
- runtime[DDIR_READ] += utime_since_now(&td->start);
+ td->ts.runtime[DDIR_READ] += utime_since_now(&td->start);
if (td->error || td->terminate)
break;
}
update_rusage_stat(td);
- td->ts.runtime[0] = (runtime[0] + 999) / 1000;
- td->ts.runtime[1] = (runtime[1] + 999) / 1000;
+ td->ts.runtime[0] = (td->ts.runtime[0] + 999) / 1000;
+ td->ts.runtime[1] = (td->ts.runtime[1] + 999) / 1000;
td->ts.total_run_time = mtime_since_now(&td->epoch);
td->ts.io_bytes[0] = td->io_bytes[0];
td->ts.io_bytes[1] = td->io_bytes[1];
iops = (1000 * ts->total_io_u[ddir]) / runt;
iops_p = num2str(iops, 6, 1, 0);
- log_info(" %s: io=%sB, bw=%sB/s, iops=%s, runt=%6lumsec\n",
+ log_info(" %s: io=%sB, bw=%sB/s, iops=%s, runt=%6llumsec\n",
ddir_str[ddir], io_p, bw_p, iops_p,
ts->runtime[ddir]);
if (ts->runtime[ddir])
bw = ts->io_bytes[ddir] / ts->runtime[ddir];
- log_info(";%llu;%llu;%lu", ts->io_bytes[ddir] >> 10, bw,
+ log_info(";%llu;%llu;%llu", ts->io_bytes[ddir] >> 10, bw,
ts->runtime[ddir]);
if (calc_lat(&ts->slat_stat[ddir], &min, &max, &mean, &dev))