Improve rate accounting
authorJens Axboe <jens.axboe@oracle.com>
Thu, 15 Mar 2007 11:09:39 +0000 (12:09 +0100)
committerJens Axboe <jens.axboe@oracle.com>
Thu, 15 Mar 2007 11:09:39 +0000 (12:09 +0100)
Don't assume usec_sleep() is extremely precise.

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
time.c

diff --git a/time.c b/time.c
index c5b67ff11e88eac9205359fb1c09bb3fa4db3fe7..80f8ca499f159f9e9473219c74480b89e6394652 100644 (file)
--- a/time.c
+++ b/time.c
@@ -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;
                unsigned long s = usec_cycle - time_spent;
 
                td->rate_pending_usleep += s;
+
                if (td->rate_pending_usleep >= 100000) {
                if (td->rate_pending_usleep >= 100000) {
+                       struct timeval t;
+
+                       fio_gettime(&t, NULL);
                        usec_sleep(td, td->rate_pending_usleep);
                        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;
                }
        } else {
                long overtime = time_spent - usec_cycle;