Add poisson rate selection to FD_RATE output
[fio.git] / backend.c
index 7a030ebbbe40e2f3a10347376d1dd26eb045479c..b329fa31f62dc929a5bb7c5796b27a2dd03d1cd2 100644 (file)
--- a/backend.c
+++ b/backend.c
@@ -782,17 +782,24 @@ static long long usec_for_io(struct thread_data *td, enum fio_ddir ddir)
        bytes = td->rate_io_issue_bytes[ddir];
        bps = td->rate_bps[ddir];
 
-       if (td->o.poisson_request) {
+       if (td->o.poisson_rate) {
+               uint64_t val;
                iops = bps / td->o.bs[ddir];
-               td->last_usec += (long long)(1000000 / iops) *
-                       (-logf(((float)rand() + 1) / ((float)RAND_MAX + 1)));
+               val = (int64_t) (1000000 / iops) *
+                               -logf(__rand_0_1(&td->poisson_state));
+               if (val) {
+                       dprint(FD_RATE, "poisson rate iops=%llu\n",
+                                       (unsigned long long) 1000000 / val);
+               }
+               td->last_usec += val;
                return td->last_usec;
        } else if (bps) {
                secs = bytes / bps;
                remainder = bytes % bps;
                return remainder * 1000000 / bps + secs * 1000000;
-       } else
-               return 0;
+       }
+
+       return 0;
 }
 
 /*