X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=time.c;h=108c0fcaab09e4b0a7d0bcfba8c6e690e83541de;hb=e4e33258637e55550a0fac59eb3350e8bf06f8e6;hp=45a415cbb43424bf54266f3913b287e5515efd39;hpb=c3852ae26bbe6072b2905938bb4fb0f511977cba;p=fio.git diff --git a/time.c b/time.c index 45a415cb..108c0fca 100644 --- a/time.c +++ b/time.c @@ -114,15 +114,15 @@ void rate_throttle(struct thread_data *td, unsigned long time_spent, unsigned long usec_cycle; unsigned int bs; - if (!td->rate) + if (!td->o.rate && !td->o.rate_iops) return; if (td_rw(td)) - bs = td->rw_min_bs; + bs = td->o.rw_min_bs; else if (td_read(td)) - bs = td->min_bs[DDIR_READ]; + bs = td->o.min_bs[DDIR_READ]; else - bs = td->min_bs[DDIR_WRITE]; + bs = td->o.min_bs[DDIR_WRITE]; usec_cycle = td->rate_usec_cycle * (bytes / bs); @@ -130,9 +130,13 @@ void rate_throttle(struct thread_data *td, unsigned long time_spent, unsigned long s = usec_cycle - time_spent; td->rate_pending_usleep += s; + if (td->rate_pending_usleep >= 100000) { + struct timeval t; + + fio_gettime(&t, NULL); usec_sleep(td, td->rate_pending_usleep); - td->rate_pending_usleep = 0; + td->rate_pending_usleep -= utime_since_now(&t); } } else { long overtime = time_spent - usec_cycle;