Move gtod thread to gettime.c
[fio.git] / fio.c
diff --git a/fio.c b/fio.c
index 87020863bf8c86c5f0096a440e66dd00b660da16..4f07214ecb65ddd7a56b77216ebc03bb3479121a 100644 (file)
--- 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(&gtod_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);