spent = mtime_since(&td->bw_sample_time, t);
if (spent < td->o.bw_avg_time)
return;
-
- /*
+
+ /*
* Compute both read and write rates for the interval.
*/
for (ddir = DDIR_READ; ddir <= DDIR_WRITE; ddir++) {
if (spent < td->o.iops_avg_time)
return;
- iops = ((td->this_io_blocks[ddir] - td->stat_io_blocks[ddir]) * 1000) / spent;
+ /*
+ * Compute both read and write rates for the interval.
+ */
+ for (ddir = DDIR_READ; ddir <= DDIR_WRITE; ddir++) {
+ uint64_t delta;
- add_stat_sample(&ts->iops_stat[ddir], iops);
+ delta = td->this_io_blocks[ddir] - td->stat_io_blocks[ddir];
+ if (!delta)
+ continue; /* No entries for interval */
+
+ iops = (delta * 1000) / spent;
+ add_stat_sample(&ts->iops_stat[ddir], iops);
- if (td->iops_log)
- add_log_sample(td, td->iops_log, iops, ddir, 0);
+ if (td->iops_log)
+ add_log_sample(td, td->iops_log, iops, ddir, 0);
+
+ td->stat_io_bytes[ddir] = td->this_io_bytes[ddir];
+ }
fio_gettime(&td->iops_sample_time, NULL);
- td->stat_io_blocks[ddir] = td->this_io_blocks[ddir];
}