From: "Carter Li 李通洲" <carter.li@eoitek.com> To: Jens Axboe <axboe@kernel.dk> Cc: Pavel Begunkov <asml.silence@gmail.com>, io-uring <io-uring@vger.kernel.org> Subject: Re: [ISSUE] The time cost of IOSQE_IO_LINK Date: Thu, 13 Feb 2020 15:51:03 +0000 Message-ID: <7E66D70C-BE4E-4236-A49B-9843F66EA322@eoitek.com> (raw) In-Reply-To: <5f09d89a-0c6d-47c2-465c-993af0c7ae71@kernel.dk> > 2020年2月13日 下午11:14,Jens Axboe <axboe@kernel.dk> 写道: > > On 2/13/20 8:08 AM, Pavel Begunkov wrote: >> On 2/13/2020 3:33 AM, Carter Li 李通洲 wrote: >>> Thanks for your reply. >>> >>> You are right the nop isn't really a good test case. But I actually >>> found this issue when benchmarking my echo server, which didn't use >>> NOP of course. >> >> If there are no hidden subtle issues in io_uring, your benchmark or the >> used pattern itself, it's probably because of overhead on async punting >> (copying iovecs, several extra switches, refcounts, grabbing mm/fs/etc, >> io-wq itself). >> >> I was going to tune async/punting stuff anyway, so I'll look into this. >> And of course, there is always a good chance Jens have some bright insights > > The main issue here is that if you do the poll->recv, then it'll be > an automatic punt of the recv to async context when the poll completes. > That's regardless of whether or not we can complete the poll inline, > we never attempt to recv inline from that completion. This is in contrast > to doing a separate poll, getting the notification, then doing another > sqe and io_uring_enter to perform the recv. For this case, we end up > doing everything inline, just with the cost of an additional system call > to submit the new recv. > > It'd be really cool if we could improve on this situation, as recv (or > read) preceded by a poll is indeed a common use case. Or ditto for the > write side. > >> BTW, what's benefit of doing poll(fd)->read(fd), but not directly read()? > > If there's no data to begin with, then the read will go async. Hence > it'll be a switch to a worker thread. The above should avoid it, but > it doesn't. Yes. I actually tested `directly read()` first, and found it was about 30% slower then poll(fd)->read(fd). https://github.com/axboe/liburing/issues/69 So it turns out that async punting has high overhead. A (silly) question: could we implement read/write operations that would block as poll->read/write? > > For carter's sake, it's worth nothing that the poll command is special > and normal requests would be more efficient with links. We just need > to work on making the poll linked with read/write perform much better. Thanks > > -- > Jens Axboe
next prev parent reply index Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-02-12 16:31 Carter Li 李通洲 2020-02-12 17:11 ` Jens Axboe 2020-02-12 17:22 ` Jens Axboe 2020-02-12 17:29 ` Jens Axboe 2020-02-13 0:33 ` Carter Li 李通洲 2020-02-13 15:08 ` Pavel Begunkov 2020-02-13 15:14 ` Jens Axboe 2020-02-13 15:51 ` Carter Li 李通洲 [this message] 2020-02-14 1:25 ` Carter Li 李通洲 2020-02-14 2:45 ` Jens Axboe 2020-02-14 5:03 ` Jens Axboe 2020-02-14 15:32 ` Peter Zijlstra 2020-02-14 15:47 ` Jens Axboe 2020-02-14 16:18 ` Jens Axboe 2020-02-14 17:52 ` Jens Axboe 2020-02-14 20:44 ` Jens Axboe 2020-02-15 0:16 ` Carter Li 李通洲 2020-02-15 1:10 ` Jens Axboe 2020-02-15 1:25 ` Carter Li 李通洲 2020-02-15 1:27 ` Jens Axboe 2020-02-15 6:01 ` Jens Axboe 2020-02-15 6:32 ` Carter Li 李通洲 2020-02-15 15:11 ` Jens Axboe 2020-02-16 19:06 ` Pavel Begunkov 2020-02-16 22:23 ` Jens Axboe 2020-02-17 10:30 ` Pavel Begunkov 2020-02-17 19:30 ` Jens Axboe 2020-02-16 23:06 ` Jens Axboe 2020-02-16 23:07 ` Jens Axboe 2020-02-17 12:09 ` Peter Zijlstra 2020-02-17 16:12 ` Jens Axboe 2020-02-17 17:16 ` Jens Axboe 2020-02-17 17:46 ` Peter Zijlstra 2020-02-17 18:16 ` Jens Axboe 2020-02-18 13:13 ` Peter Zijlstra 2020-02-18 14:27 ` [PATCH] asm-generic/atomic: Add try_cmpxchg() fallbacks Peter Zijlstra 2020-02-18 14:40 ` Peter Zijlstra 2020-02-20 10:30 ` Will Deacon 2020-02-20 10:37 ` Peter Zijlstra 2020-02-20 10:39 ` Will Deacon 2020-02-18 14:56 ` [ISSUE] The time cost of IOSQE_IO_LINK Oleg Nesterov 2020-02-18 15:07 ` Oleg Nesterov 2020-02-18 15:38 ` Peter Zijlstra 2020-02-18 16:33 ` Jens Axboe 2020-02-18 15:07 ` Peter Zijlstra 2020-02-18 15:50 ` [PATCH] task_work_run: don't take ->pi_lock unconditionally Oleg Nesterov 2020-02-20 16:39 ` Peter Zijlstra 2020-02-20 17:22 ` Oleg Nesterov 2020-02-20 17:49 ` Peter Zijlstra 2020-02-21 14:52 ` Oleg Nesterov 2020-02-24 18:47 ` Jens Axboe 2020-02-28 19:17 ` Jens Axboe 2020-02-28 19:25 ` Peter Zijlstra 2020-02-28 19:28 ` Jens Axboe 2020-02-28 20:06 ` Peter Zijlstra 2020-02-28 20:15 ` Jens Axboe 2020-02-18 16:46 ` [ISSUE] The time cost of IOSQE_IO_LINK Jens Axboe 2020-02-18 16:52 ` Jens Axboe 2020-02-18 13:13 ` Peter Zijlstra
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=7E66D70C-BE4E-4236-A49B-9843F66EA322@eoitek.com \ --to=carter.li@eoitek.com \ --cc=asml.silence@gmail.com \ --cc=axboe@kernel.dk \ --cc=io-uring@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
IO-Uring Archive on lore.kernel.org Archives are clonable: git clone --mirror https://lore.kernel.org/io-uring/0 io-uring/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 io-uring io-uring/ https://lore.kernel.org/io-uring \ io-uring@vger.kernel.org public-inbox-index io-uring Example config snippet for mirrors Newsgroup available over NNTP: nntp://nntp.lore.kernel.org/org.kernel.vger.io-uring AGPL code for this site: git clone https://public-inbox.org/public-inbox.git