From: Vincent Fu <vincentfu@gmail.com>
To: Ankit Kumar <ankit.kumar@samsung.com>, axboe@kernel.dk
Cc: fio@vger.kernel.org
Subject: Re: [PATCH 1/2] engines:io_uring: slat and clat calculation with sqthread_poll
Date: Tue, 22 Nov 2022 17:25:52 -0500 [thread overview]
Message-ID: <5fd79355-de14-88c6-d9e0-8aaf45f0960c@gmail.com> (raw)
In-Reply-To: <20221104111314.25535-2-ankit.kumar@samsung.com>
On 11/4/22 07:13, Ankit Kumar wrote:
> When sqthread_poll is specified for io_uring and io_uring_cmd I/O engines,
> fio doesn't report submission latency and the completion latency is too big.
> Latency data before:
>
> fio --name=test --size=1M --rw=randread --ioengine=io_uring --sqthread_poll=1
> clat (msec): min=1120.1k, max=1120.1k, avg=1120092.65, stdev= 8.32
> lat (usec): min=104, max=5312, avg=132.81, stdev=325.05
> clat percentiles (msec):
> | 1.00th=[17113], 5.00th=[17113], 10.00th=[17113], 20.00th=[17113],
> | 30.00th=[17113], 40.00th=[17113], 50.00th=[17113], 60.00th=[17113],
> | 70.00th=[17113], 80.00th=[17113], 90.00th=[17113], 95.00th=[17113],
> | 99.00th=[17113], 99.50th=[17113], 99.90th=[17113], 99.95th=[17113],
> | 99.99th=[17113]
> lat (msec) : >=2000=100.00%
>
> As kernel polling thread handles the submission, there is no way to know when
> the actual submission happened. We can only rely on the commit hook and
> measure the issue time.
> Latency data after the change:
>
> fio --name=test --size=1M --rw=randread --ioengine=io_uring --sqthread_poll=1
> slat (nsec): min=50, max=2230, avg=146.68, stdev=138.08
> clat (usec): min=105, max=5151, avg=132.98, stdev=314.89
> lat (usec): min=105, max=5153, avg=133.13, stdev=315.03
> clat percentiles (usec):
> | 1.00th=[ 106], 5.00th=[ 108], 10.00th=[ 109], 20.00th=[ 110],
> | 30.00th=[ 111], 40.00th=[ 113], 50.00th=[ 114], 60.00th=[ 115],
> | 70.00th=[ 117], 80.00th=[ 118], 90.00th=[ 119], 95.00th=[ 121],
> | 99.00th=[ 123], 99.50th=[ 123], 99.90th=[ 5145], 99.95th=[ 5145],
> | 99.99th=[ 5145]
> lat (usec) : 250=99.61%
> lat (msec) : 10=0.39%
>
> Signed-off-by: Ankit Kumar <ankit.kumar@samsung.com>
> ---
> engines/io_uring.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/engines/io_uring.c b/engines/io_uring.c
> index 6906e0a4..0d18fd4a 100644
> --- a/engines/io_uring.c
> +++ b/engines/io_uring.c
> @@ -637,12 +637,16 @@ 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 flags;
>
> flags = atomic_load_acquire(ring->flags);
> if (flags & IORING_SQ_NEED_WAKEUP)
> io_uring_enter(ld, ld->queued, 0,
> IORING_ENTER_SQ_WAKEUP);
> + fio_ioring_queued(td, start, ld->queued);
> + io_u_mark_submit(td, ld->queued);
> +
> ld->queued = 0;
> return 0;
> }
Ankit, I think the important point here is to make sure that the
reported slat and clat values when sqthread_poll=1 can be meaningfully
compared to corresponding values when sqthread_poll=0.
That means we need to record issue_time at corresponding points in the
submission process but it's not obvious to me where to record issue_time
when sqthread_poll=1.
I can think of two reasonable solutions when sqthread_poll is enabled:
1) suppress slat and clat when sqthread_poll=1 because we don't have a
good place to record issue_time
2) record issue_time and the end of fio_ioring_queue() when
IORING_SQ_NEED_WAKEUP is not set and in commit() as you have above when
it is flagged
What do you think?
Jens, do you have an opinion here?
Vincent
next prev parent reply other threads:[~2022-11-22 22:25 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CGME20221104112440epcas5p24f13b6a1c3db0b38b8453a896fb31575@epcas5p2.samsung.com>
2022-11-04 11:13 ` [PATCH 0/2] slat and clat reporting with sqthread_poll Ankit Kumar
2022-11-04 11:13 ` [PATCH 1/2] engines:io_uring: slat and clat calculation " Ankit Kumar
2022-11-22 22:25 ` Vincent Fu [this message]
2022-11-22 22:56 ` Jens Axboe
2022-11-04 11:13 ` [PATCH 2/2] doc: update about sqthread_poll Ankit Kumar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5fd79355-de14-88c6-d9e0-8aaf45f0960c@gmail.com \
--to=vincentfu@gmail.com \
--cc=ankit.kumar@samsung.com \
--cc=axboe@kernel.dk \
--cc=fio@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox