X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=stat.c;h=a02c5829a494cf330a9394e731c0802b83b8b567;hb=e164534f44e12fec73d418e7f1d9c8b12dee925f;hp=7e3b97966c0b7754cdb10333ffa341a0adf26a5e;hpb=2f2c69242ba72508fb5429d12e1fd72c3cc1e76c;p=fio.git diff --git a/stat.c b/stat.c index 7e3b9796..a02c5829 100644 --- a/stat.c +++ b/stat.c @@ -1292,15 +1292,26 @@ void add_bw_sample(struct thread_data *td, enum fio_ddir ddir, unsigned int bs, if (spent < td->o.bw_avg_time) return; - rate = (td->this_io_bytes[ddir] - td->stat_io_bytes[ddir]) * - 1000 / spent / 1024; - add_stat_sample(&ts->bw_stat[ddir], rate); + /* + * Compute both read and write rates for the interval. + */ + for (ddir = DDIR_READ; ddir <= DDIR_WRITE; ddir++) { + uint64_t delta; + + delta = td->this_io_bytes[ddir] - td->stat_io_bytes[ddir]; + if (!delta) + continue; /* No entries for interval */ - if (td->bw_log) - add_log_sample(td, td->bw_log, rate, ddir, bs); + rate = delta * 1000 / spent / 1024; + add_stat_sample(&ts->bw_stat[ddir], rate); + + if (td->bw_log) + add_log_sample(td, td->bw_log, rate, ddir, bs); + + td->stat_io_bytes[ddir] = td->this_io_bytes[ddir]; + } fio_gettime(&td->bw_sample_time, NULL); - td->stat_io_bytes[ddir] = td->this_io_bytes[ddir]; } void add_iops_sample(struct thread_data *td, enum fio_ddir ddir, @@ -1316,13 +1327,24 @@ void add_iops_sample(struct thread_data *td, enum fio_ddir 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; + + delta = td->this_io_blocks[ddir] - td->stat_io_blocks[ddir]; + if (!delta) + continue; /* No entries for interval */ - add_stat_sample(&ts->iops_stat[ddir], iops); + 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]; }