From b85c01f7e9dfc468eb78faf86692433e6105178d Mon Sep 17 00:00:00 2001 From: Kookoo Gu Date: Wed, 26 Jul 2023 12:48:35 +0800 Subject: [PATCH] iolog.c: fix inaccurate clat when replay trace When do timestamp replay with high qd it will only reap the completed commands when the qd reach the max iodepth, the commands probably are finished long ago before command completion handling. Fix is to use io_u_queued_complete instead of just usec_sleep in iolog_delay Signed-off-by: Kookoo Gu --- iolog.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/iolog.c b/iolog.c index cc2cbc65e..97ba43967 100644 --- a/iolog.c +++ b/iolog.c @@ -82,8 +82,8 @@ static void iolog_delay(struct thread_data *td, unsigned long delay) { uint64_t usec = utime_since_now(&td->last_issue); unsigned long orig_delay = delay; - uint64_t this_delay; struct timespec ts; + int ret = 0; if (delay < td->time_offset) { td->time_offset = 0; @@ -97,13 +97,13 @@ static void iolog_delay(struct thread_data *td, unsigned long delay) delay -= usec; fio_gettime(&ts, NULL); - while (delay && !td->terminate) { - this_delay = delay; - if (this_delay > 500000) - this_delay = 500000; - usec_sleep(td, this_delay); - delay -= this_delay; + while (delay && !td->terminate) { + ret = io_u_queued_complete(td, 0); + if (ret < 0) + td_verror(td, -ret, "io_u_queued_complete"); + if (utime_since_now(&ts) > delay) + break; } usec = utime_since_now(&ts);