X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=fio.c;h=c17ea3c3ae8822ba68f8f705c4ce13812d5052a3;hp=231a581f5478df56054531137d2f1b17ebc3ba57;hb=5e1d306e4f9a6337d07cc2d536d77c53e083226f;hpb=47d85e2bd4763204a983c7bf4833c0d466dc36ca diff --git a/fio.c b/fio.c index 231a581f..c17ea3c3 100644 --- a/fio.c +++ b/fio.c @@ -49,6 +49,7 @@ int nr_process = 0; int nr_thread = 0; int shm_id = 0; int temp_stall_ts; +unsigned long done_secs = 0; static struct fio_mutex *startup_mutex; static volatile int fio_abort; @@ -411,10 +412,10 @@ sync_done: */ min_events = 0; if (queue_full(td) || ret == FIO_Q_BUSY) { - min_events = 1; - - if (td->cur_depth > td->o.iodepth_low) + if (td->cur_depth >= td->o.iodepth_low) min_events = td->cur_depth - td->o.iodepth_low; + if (!min_events) + min_events = 1; } /* @@ -544,16 +545,12 @@ sync_done: /* * See if we need to complete some commands */ - if (ret == FIO_Q_QUEUED || ret == FIO_Q_BUSY) { + if (queue_full(td) || ret == FIO_Q_BUSY) { min_evts = 0; - if (queue_full(td) || ret == FIO_Q_BUSY) { + if (td->cur_depth >= td->o.iodepth_low) + min_evts = td->cur_depth - td->o.iodepth_low; + if (!min_evts) min_evts = 1; - - if (td->cur_depth > td->o.iodepth_low) - min_evts = td->cur_depth - - td->o.iodepth_low; - } - fio_gettime(&comp_time, NULL); bytes_done = io_u_queued_complete(td, min_evts); if (bytes_done < 0) @@ -641,22 +638,6 @@ static void cleanup_io_u(struct thread_data *td) free_io_mem(td); } -/* - * "randomly" fill the buffer contents - */ -static void fill_io_buf(struct thread_data *td, struct io_u *io_u, int max_bs) -{ - long *ptr = io_u->buf; - - 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) { struct io_u *io_u; @@ -699,8 +680,8 @@ static int init_io_u(struct thread_data *td) if (!(td->io_ops->flags & FIO_NOIO)) { io_u->buf = p + max_bs * i; - if (td_write(td)) - fill_io_buf(td, io_u, max_bs); + if (td_write(td) && !td->o.refill_buffers) + io_u_fill_buffer(td, io_u, max_bs); } io_u->index = i; @@ -1118,6 +1099,8 @@ reaped: if (td->error) exit_value++; + + done_secs += mtime_since_now(&td->epoch) / 1000; } if (*nr_running == cputhreads && !pending && realthreads) @@ -1250,12 +1233,15 @@ static void run_threads(void) if (pthread_detach(td->thread) < 0) perror("pthread_detach"); } else { + pid_t pid; dprint(FD_PROCESS, "will fork\n"); - if (!fork()) { + pid = fork(); + if (!pid) { int ret = fork_main(shm_id, i); - exit(ret); - } + _exit(ret); + } else if (i == fio_debug_jobno) + *fio_debug_jobp = pid; } fio_mutex_down(startup_mutex); }