From: Kookoo Gu Date: Wed, 26 Jul 2023 04:48:35 +0000 (+0800) Subject: iolog.c: fix inaccurate clat when replay trace X-Git-Tag: fio-3.36~35^2 X-Git-Url: https://git.kernel.dk/?a=commitdiff_plain;ds=sidebyside;h=b85c01f7e9dfc468eb78faf86692433e6105178d;p=fio.git 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 --- diff --git a/iolog.c b/iolog.c index cc2cbc65..97ba4396 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);