X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=fio.c;h=d8c143332823bf2c488ef0799951c8ce70c71fe3;hb=fcb11708806c026566f2af58833ea919419a066d;hp=296ac343fb437bd14bca2ca1691ae8b66c8670b4;hpb=d460eb318f784876812bedfed382afb00e57c62a;p=fio.git diff --git a/fio.c b/fio.c index 296ac343..d8c14333 100644 --- a/fio.c +++ b/fio.c @@ -35,6 +35,7 @@ #include #include "fio.h" +#include "hash.h" unsigned long page_mask; unsigned long page_size; @@ -310,6 +311,7 @@ static void do_verify(struct thread_data *td) if (runtime_exceeded(td, &io_u->start_time)) { put_io_u(td, io_u); + td->terminate = 1; break; } @@ -348,6 +350,8 @@ static void do_verify(struct thread_data *td) io_u->offset += bytes; f->last_completed_pos = io_u->offset; + td->ts.short_io_u[io_u->ddir]++; + if (io_u->offset == f->real_file_size) goto sync_done; @@ -438,6 +442,7 @@ static void do_io(struct thread_data *td) if (runtime_exceeded(td, &s)) { put_io_u(td, io_u); + td->terminate = 1; break; } @@ -464,6 +469,8 @@ static void do_io(struct thread_data *td) io_u->offset += bytes; f->last_completed_pos = io_u->offset; + td->ts.short_io_u[io_u->ddir]++; + if (io_u->offset == f->real_file_size) goto sync_done; @@ -592,14 +599,17 @@ static void cleanup_io_u(struct thread_data *td) /* * "randomly" fill the buffer contents */ -static void fill_rand_buf(struct io_u *io_u, int max_bs) +static void fill_io_buf(struct thread_data *td, struct io_u *io_u, int max_bs) { - int *ptr = io_u->buf; + long *ptr = io_u->buf; - while ((void *) ptr - io_u->buf < max_bs) { - *ptr = rand() * 0x9e370001; - ptr++; - } + if (!td->o.zero_buffers) { + while ((void *) ptr - io_u->buf < max_bs) { + *ptr = rand() * GOLDEN_RATIO_PRIME; + ptr++; + } + } else + memset(ptr, 0, max_bs); } static int init_io_u(struct thread_data *td) @@ -640,8 +650,9 @@ static int init_io_u(struct thread_data *td) INIT_LIST_HEAD(&io_u->list); io_u->buf = p + max_bs * i; - if (td_write(td) || td_rw(td)) - fill_rand_buf(io_u, max_bs); + + if (td_write(td)) + fill_io_buf(td, io_u, max_bs); io_u->index = i; io_u->flags = IO_U_F_FREE; @@ -818,7 +829,7 @@ static void *thread_main(void *data) runtime[0] = runtime[1] = 0; clear_state = 0; - while (td->o.loops--) { + while (td->o.time_based || td->o.loops--) { fio_gettime(&td->start, NULL); memcpy(&td->ts.stat_sample_time, &td->start, sizeof(td->start));