rate = (td->this_io_bytes[ddir] - td->rate_bytes) / spent;
if (rate < td->ratemin) {
- fprintf(f_out, "%s: min rate %d not met, got %ldKiB/sec\n", td->name, td->ratemin, rate);
+ fprintf(f_out, "%s: min rate %u not met, got %luKiB/sec\n", td->name, td->ratemin, rate);
return 1;
}
}
* The main verify engine. Runs over the writes we previusly submitted,
* reads the blocks back in, and checks the crc/md5 of the data.
*/
-void do_verify(struct thread_data *td)
+static void do_verify(struct thread_data *td)
{
struct io_u *io_u, *v_io_u = NULL;
struct io_completion_data icd;
if (runtime_exceeded(td, &icd.time))
break;
- if (td->thinktime)
- usec_sleep(td, td->thinktime);
+ if (td->thinktime) {
+ unsigned long long b;
+
+ b = td->io_blocks[0] + td->io_blocks[1];
+ if (!(td->thinktime_blocks % b))
+ usec_sleep(td, td->thinktime);
+ }
}
if (!td->error) {
max_units = td->iodepth;
max_bs = max(td->max_bs[DDIR_READ], td->max_bs[DDIR_WRITE]);
- td->orig_buffer_size = max_bs * max_units + MASK;
+ td->orig_buffer_size = max_bs * max_units;
+
+ if (td->mem_type == MEM_SHMHUGE || td->mem_type == MEM_MMAPHUGE)
+ td->orig_buffer_size = (td->orig_buffer_size + td->hugepage_size - 1) & ~(td->hugepage_size - 1);
+ else
+ td->orig_buffer_size += MASK;
if (allocate_io_mem(td))
return 1;
*/
static void *thread_main(void *data)
{
+ unsigned long long runtime[2];
struct thread_data *td = data;
if (!td->use_thread)
if (open_files(td))
goto err;
- fio_gettime(&td->epoch, NULL);
-
if (td->exec_prerun)
system(td->exec_prerun);
+ fio_gettime(&td->epoch, NULL);
+ getrusage(RUSAGE_SELF, &td->ru_start);
+
+ runtime[0] = runtime[1] = 0;
while (td->loops--) {
- getrusage(RUSAGE_SELF, &td->ru_start);
fio_gettime(&td->start, NULL);
memcpy(&td->stat_sample_time, &td->start, sizeof(td->start));
else
do_io(td);
- td->runtime[td->ddir] += mtime_since_now(&td->start);
+ runtime[td->ddir] += utime_since_now(&td->start);
if (td_rw(td) && td->io_bytes[td->ddir ^ 1])
- td->runtime[td->ddir ^ 1] = td->runtime[td->ddir];
-
- update_rusage_stat(td);
+ runtime[td->ddir ^ 1] = runtime[td->ddir];
if (td->error || td->terminate)
break;
do_verify(td);
- td->runtime[DDIR_READ] += mtime_since_now(&td->start);
+ runtime[DDIR_READ] += utime_since_now(&td->start);
if (td->error || td->terminate)
break;
}
+ update_rusage_stat(td);
+ fio_gettime(&td->end_time, NULL);
+ td->runtime[0] = runtime[0] / 1000;
+ td->runtime[1] = runtime[1] / 1000;
+
if (td->bw_log)
finish_log(td, td->bw_log, "bw");
if (td->slat_log)