From: Jueji Yang Date: Thu, 6 Jul 2023 12:07:28 +0000 (+0800) Subject: fix: io_uring sqpoll issue_time empty when kernel not yet read sq X-Git-Tag: fio-3.36~58^2 X-Git-Url: https://git.kernel.dk/?a=commitdiff_plain;h=10bad6b9a15f56a4eefb1a12a0ebb7f43c9d4a42;p=fio.git fix: io_uring sqpoll issue_time empty when kernel not yet read sq In io_uring sqpoll mode, when kernel side thread has not yet read the sqring before second fio_ioring_commit() called, the sq_ring.head will remain the same. The second fio_ioring_commit() will initialize the wrong io_u's issue_time. The old(in head) io_u‘s issue_time will to be initialized twice and new(in tail - 1) io_u's issue_time will not to be initialized. This problem will cause clat is weird, sometimes larger than lat. Signed-off-by: Jueji Yang --- diff --git a/engines/io_uring.c b/engines/io_uring.c index 5021239e..9f8e8e6f 100644 --- a/engines/io_uring.c +++ b/engines/io_uring.c @@ -646,7 +646,7 @@ static int fio_ioring_commit(struct thread_data *td) */ if (o->sqpoll_thread) { struct io_sq_ring *ring = &ld->sq_ring; - unsigned start = *ld->sq_ring.head; + unsigned start = *ld->sq_ring.tail - ld->queued; unsigned flags; flags = atomic_load_acquire(ring->flags);