X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=fio.c;h=4f07214ecb65ddd7a56b77216ebc03bb3479121a;hp=87020863bf8c86c5f0096a440e66dd00b660da16;hb=783a3eb15f143d26eed5fd1c943f238057f3ee52;hpb=068420271828b3b2426ffc3ccf64404cb9d340fb diff --git a/fio.c b/fio.c index 87020863..4f07214e 100644 --- a/fio.c +++ b/fio.c @@ -73,7 +73,6 @@ static struct fio_mutex *startup_mutex; static struct fio_mutex *writeout_mutex; static volatile int fio_abort; static int exit_value; -static pthread_t gtod_thread; static pthread_t disk_util_thread; static struct flist_head *cgroup_list; static char *cgroup_mnt; @@ -343,6 +342,8 @@ static int check_min_rate(struct thread_data *td, struct timeval *now, static inline int runtime_exceeded(struct thread_data *td, struct timeval *t) { + if (in_ramp_time(td)) + return 0; if (!td->o.timeout) return 0; if (mtime_since(&td->epoch, t) >= td->o.timeout * 1000) @@ -1248,9 +1249,12 @@ static void *thread_main(void *data) memcpy(&td->iops_sample_time, &td->start, sizeof(td->start)); memcpy(&td->tv_cache, &td->start, sizeof(td->start)); - if (td->o.ratemin[0] || td->o.ratemin[1]) - memcpy(&td->lastrate, &td->bw_sample_time, - sizeof(td->lastrate)); + if (td->o.ratemin[0] || td->o.ratemin[1]) { + memcpy(&td->lastrate[0], &td->bw_sample_time, + sizeof(td->bw_sample_time)); + memcpy(&td->lastrate[1], &td->bw_sample_time, + sizeof(td->bw_sample_time)); + } if (clear_state) clear_io_state(td); @@ -1497,50 +1501,6 @@ reaped: fio_terminate_threads(TERMINATE_ALL); } -static void *gtod_thread_main(void *data) -{ - fio_mutex_up(startup_mutex); - - /* - * As long as we have jobs around, update the clock. It would be nice - * to have some way of NOT hammering that CPU with gettimeofday(), - * but I'm not sure what to use outside of a simple CPU nop to relax - * it - we don't want to lose precision. - */ - while (threads) { - fio_gtod_update(); - nop; - } - - return NULL; -} - -static int fio_start_gtod_thread(void) -{ - pthread_attr_t attr; - int ret; - - pthread_attr_init(&attr); - pthread_attr_setstacksize(&attr, PTHREAD_STACK_MIN); - ret = pthread_create(>od_thread, &attr, gtod_thread_main, NULL); - pthread_attr_destroy(&attr); - if (ret) { - log_err("Can't create gtod thread: %s\n", strerror(ret)); - return 1; - } - - ret = pthread_detach(gtod_thread); - if (ret) { - log_err("Can't detatch gtod thread: %s\n", strerror(ret)); - return 1; - } - - dprint(FD_MUTEX, "wait on startup_mutex\n"); - fio_mutex_down(startup_mutex); - dprint(FD_MUTEX, "done waiting on startup_mutex\n"); - return 0; -} - /* * Main function for kicking off and reaping jobs, as needed. */ @@ -1794,8 +1754,8 @@ int exec_run(void) return 0; if (write_bw_log) { - setup_log(&agg_io_log[DDIR_READ]); - setup_log(&agg_io_log[DDIR_WRITE]); + setup_log(&agg_io_log[DDIR_READ], 0); + setup_log(&agg_io_log[DDIR_WRITE], 0); } startup_mutex = fio_mutex_init(0);