projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix IOPS logging for mixed read/write workloads
[fio.git]
/
stat.c
diff --git
a/stat.c
b/stat.c
index 68744281a92de519cbb1f350fb459dfcca517cfd..a02c5829a494cf330a9394e731c0802b83b8b567 100644
(file)
--- a/
stat.c
+++ b/
stat.c
@@
-1291,8
+1291,8
@@
void add_bw_sample(struct thread_data *td, enum fio_ddir ddir, unsigned int bs,
spent = mtime_since(&td->bw_sample_time, t);
if (spent < td->o.bw_avg_time)
return;
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++) {
* Compute both read and write rates for the interval.
*/
for (ddir = DDIR_READ; ddir <= DDIR_WRITE; ddir++) {
@@
-1327,13
+1327,24
@@
void add_iops_sample(struct thread_data *td, enum fio_ddir ddir,
if (spent < td->o.iops_avg_time)
return;
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);
fio_gettime(&td->iops_sample_time, NULL);
- td->stat_io_blocks[ddir] = td->this_io_blocks[ddir];
}
}