From: Jens Axboe <[email protected]>
To: "Carter Li 李通洲" <[email protected]>,
"Pavel Begunkov" <[email protected]>
Cc: io-uring <[email protected]>
Subject: Re: [RFC] single cqe per link
Date: Mon, 24 Feb 2020 20:13:12 -0700 [thread overview]
Message-ID: <[email protected]> (raw)
In-Reply-To: <[email protected]>
On 2/24/20 7:36 PM, Jens Axboe wrote:
> On 2/24/20 7:14 PM, Carter Li 李通洲 wrote:
>>> 2020年2月25日 上午8:39,Pavel Begunkov <[email protected]> 写道:
>>>
>>> I've got curious about performance of the idea of having only 1 CQE per link
>>> (for the failed or last one). Tested it with a quick dirty patch doing
>>> submit-and-reap of a nops-link (patched for inline execution).
>>>
>>> 1) link size: 100
>>> old: 206 ns per nop
>>> new: 144 ns per nop
>>>
>>> 2) link size: 10
>>> old: 234 ns per nop
>>> new: 181 ns per nop
>>>
>>> 3) link size: 10, FORCE_ASYNC
>>> old: 667 ns per nop
>>> new: 569 ns per nop
>>>
>>>
>>> The patch below breaks sequences, linked_timeout and who knows what else.
>>> The first one requires synchronisation/atomic, so it's a bit in the way. I've
>>> been wondering, whether IOSQE_IO_DRAIN is popular and how much it's used. We can
>>> try to find tradeoff or even disable it with this feature.
>>
>> Hello Pavel,
>>
>> I still think flags tagged on sqes could be a better choice, which
>> gives users an ability to deside if they want to ignore the cqes, not
>> only for links, but also for normal sqes.
>>
>> In addition, boxed cqes couldn’t resolve the issue of
>> IORING_IO_TIMEOUT.
>
> I would tend to agree, and it'd be trivial to just set the flag on
> whatever SQEs in the chain you don't care about. Or even an individual
> SQE, though that's probably a bit more of a reach in terms of use case.
> Maybe nop with drain + ignore?
>
> In any case it's definitely more flexible.
In the interest of taking this to the extreme, I tried a nop benchmark
on my laptop (qemu/kvm). Granted, this setup is particularly sensitive
to spinlocks, they are a lot more expensive there than on a real host.
Anyway, regular nops run at about 9.5M/sec with a single thread.
Flagging all SQEs with IOSQE_NO_CQE nets me about 14M/sec. So a handy
improvement. Looking at the top of profiles:
cqe-per-sqe:
+ 28.45% io_uring [kernel.kallsyms] [k] _raw_spin_unlock_irqrestore
+ 14.38% io_uring [kernel.kallsyms] [k] io_submit_sqes
+ 9.38% io_uring [kernel.kallsyms] [k] io_put_req
+ 7.25% io_uring libc-2.31.so [.] syscall
+ 6.12% io_uring [kernel.kallsyms] [k] kmem_cache_free
no-cqes:
+ 19.72% io_uring [kernel.kallsyms] [k] io_put_req
+ 11.93% io_uring [kernel.kallsyms] [k] io_submit_sqes
+ 10.14% io_uring [kernel.kallsyms] [k] kmem_cache_free
+ 9.55% io_uring libc-2.31.so [.] syscall
+ 7.48% io_uring [kernel.kallsyms] [k] __io_queue_sqe
I'll try the real disk IO tomorrow, using polled IO.
--
Jens Axboe
next prev parent reply other threads:[~2020-02-25 3:13 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-25 0:39 [RFC] single cqe per link Pavel Begunkov
2020-02-25 2:14 ` Carter Li 李通洲
2020-02-25 2:36 ` Jens Axboe
2020-02-25 3:13 ` Jens Axboe [this message]
2020-02-25 10:12 ` Pavel Begunkov
2020-02-25 20:20 ` Jens Axboe
2020-02-25 21:13 ` Pavel Begunkov
2020-08-21 5:17 ` Questions about IORING_OP_ASYNC_CANCEL usage Carter Li 李通洲
2020-08-21 5:20 ` Carter Li 李通洲
2020-02-25 2:24 ` [RFC] single cqe per link Jens Axboe
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 \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
/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