From d8005759746a2cb5c8269201911b1997aa714e80 Mon Sep 17 00:00:00 2001 From: Jens Axboe Date: Thu, 15 May 2008 09:49:09 +0200 Subject: [PATCH 1/1] Improve iodepth logging Signed-off-by: Jens Axboe --- fio.h | 4 ++-- io_u.c | 7 +------ ioengines.c | 22 +++++++++++++++------- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/fio.h b/fio.h index f201b33b..5ee43e0a 100644 --- a/fio.h +++ b/fio.h @@ -559,10 +559,10 @@ struct thread_data { * Current IO depth and list of free and busy io_u's. */ unsigned int cur_depth; + unsigned int io_u_queued; struct list_head io_u_freelist; struct list_head io_u_busylist; struct list_head io_u_requeues; - unsigned int io_u_queued; /* * Rate state @@ -906,7 +906,7 @@ extern void io_u_queued(struct thread_data *, struct io_u *); extern void io_u_log_error(struct thread_data *, struct io_u *); extern void io_u_init_timeout(void); extern void io_u_set_timeout(struct thread_data *); -extern void io_u_mark_depth(struct thread_data *, struct io_u *, unsigned int); +extern void io_u_mark_depth(struct thread_data *, unsigned int); /* * io engine entry points diff --git a/io_u.c b/io_u.c index ec348781..7f52a243 100644 --- a/io_u.c +++ b/io_u.c @@ -410,14 +410,10 @@ out: return 0; } -void io_u_mark_depth(struct thread_data *td, struct io_u *io_u, - unsigned int nr) +void io_u_mark_depth(struct thread_data *td, unsigned int nr) { int index = 0; - if (io_u->ddir == DDIR_SYNC) - return; - switch (td->cur_depth) { default: index = 6; @@ -441,7 +437,6 @@ void io_u_mark_depth(struct thread_data *td, struct io_u *io_u, } td->ts.io_u_map[index] += nr; - td->ts.total_io_u[io_u->ddir] += nr; } static void io_u_mark_lat_usec(struct thread_data *td, unsigned long usec) diff --git a/ioengines.c b/ioengines.c index 984c01ac..d3ee4b98 100644 --- a/ioengines.c +++ b/ioengines.c @@ -237,14 +237,20 @@ int td_io_queue(struct thread_data *td, struct io_u *io_u) unlock_file(td, io_u->file); - if (ret != FIO_Q_BUSY) - io_u_mark_depth(td, io_u, 1); - - if (ret == FIO_Q_QUEUED) { + if (ret == FIO_Q_COMPLETED) { + if (io_u->ddir != DDIR_SYNC) { + io_u_mark_depth(td, 1); + td->ts.total_io_u[io_u->ddir]++; + } + } else if (ret == FIO_Q_QUEUED) { int r; - td->io_u_queued++; - if (td->io_u_queued > td->o.iodepth_batch) { + if (io_u->ddir != DDIR_SYNC) { + td->io_u_queued++; + td->ts.total_io_u[io_u->ddir]++; + } + + if (td->io_u_queued >= td->o.iodepth_batch) { r = td_io_commit(td); if (r < 0) return r; @@ -288,10 +294,12 @@ int td_io_commit(struct thread_data *td) { dprint(FD_IO, "calling ->commit(), depth %d\n", td->cur_depth); - if (!td->cur_depth) + if (!td->cur_depth || !td->io_u_queued) return 0; + io_u_mark_depth(td, td->io_u_queued); td->io_u_queued = 0; + if (td->io_ops->commit) return td->io_ops->commit(td); -- 2.25.1