From: Roman Penyaev <email@example.com> To: Eric Wong <firstname.lastname@example.org> Cc: Jason Baron <email@example.com>, Andrew Morton <firstname.lastname@example.org>, Al Viro <email@example.com>, Linus Torvalds <firstname.lastname@example.org>, Peter Zijlstra <email@example.com>, Azat Khuzhin <firstname.lastname@example.org>, email@example.com, firstname.lastname@example.org Subject: Re: [PATCH v5 00/14] epoll: support pollable epoll from userspace Date: Tue, 25 Jun 2019 13:07:02 +0200 [thread overview] Message-ID: <email@example.com> (raw) In-Reply-To: <20190625002456.unhdqihvs5lqcjn6@dcvr> On 2019-06-25 02:24, Eric Wong wrote: > Roman Penyaev <firstname.lastname@example.org> wrote: >> Hi all, > > +cc Jason Baron > >> ** Limitations > > <snip> > >> 4. No support for EPOLLEXCLUSIVE >> If device does not pass pollflags to wake_up() there is no way to >> call poll() from the context under spinlock, thus special work is >> scheduled to offload polling. In this specific case we can't >> support exclusive wakeups, because we do not know actual result >> of scheduled work and have to wake up every waiter. > > Lacking EPOLLEXCLUSIVE support is probably a showstopper for > common applications using per-task epoll combined with > non-blocking accept4() (e.g. nginx). For the 'accept' case it seems SO_REUSEPORT can be used: https://lwn.net/Articles/542629/ Although I've never tried it in O_NONBLOCK + epoll scenario. But I've just again dived into this add-wait-exclusive logic and it seems possible to support EPOLLEXCLUSIVE by iterating over all "epis" for a particular fd, which has been woken up. For now I want to leave it as is just not to overcomplicate the code. > Fwiw, I'm still a weirdo who prefers a dedicated thread doing > blocking accept4 for distribution between tasks (so epoll never > sees a listen socket). But, depending on what runtime/language > I'm using, I can't always dedicate a blocking thread, so I > recently started using EPOLLEXCLUSIVE from Perl5 where I > couldn't rely on threads being available. > > > If I could dedicate time to improving epoll; I'd probably > add writev() support for batching epoll_ctl modifications > to reduce syscall traffic, or pick-up the kevent()-like interface > started long ago: > https://email@example.com/ > (but I'm not sure I want to increase the size of the syscall table). There is also fresh fs/io_uring.c thingy, which supports polling and batching (among other IO things). But polling there acts only as a single-shot, so it might make sense to support there event subscription instead of resurrecting kevent and co. -- Roman
prev parent reply other threads:[~2019-06-25 11:07 UTC|newest] Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-06-24 14:41 Roman Penyaev 2019-06-24 14:41 ` [PATCH v5 01/14] epoll: move private helpers from a header to the source Roman Penyaev 2019-06-24 14:41 ` [PATCH v5 02/14] epoll: introduce user structures for polling from userspace Roman Penyaev 2019-06-24 14:41 ` [PATCH v5 03/14] epoll: allocate user header and user events ring " Roman Penyaev 2019-06-24 14:41 ` [PATCH v5 04/14] epoll: some sanity flags checks for epoll syscalls " Roman Penyaev 2019-06-24 14:41 ` [PATCH v5 05/14] epoll: offload polling to a work in case of epfd polled " Roman Penyaev 2019-06-24 14:41 ` [PATCH v5 06/14] epoll: introduce helpers for adding/removing events to uring Roman Penyaev 2019-06-24 14:41 ` [PATCH v5 07/14] epoll: call ep_add_event_to_uring() from ep_poll_callback() Roman Penyaev 2019-06-24 14:41 ` [PATCH v5 08/14] epoll: support polling from userspace for ep_insert() Roman Penyaev 2019-06-24 14:41 ` [PATCH v5 09/14] epoll: support polling from userspace for ep_remove() Roman Penyaev 2019-06-24 14:41 ` [PATCH v5 10/14] epoll: support polling from userspace for ep_modify() Roman Penyaev 2019-06-24 14:41 ` [PATCH v5 11/14] epoll: support polling from userspace for ep_poll() Roman Penyaev 2019-06-24 14:41 ` [PATCH v5 12/14] epoll: support mapping for epfd when polled from userspace Roman Penyaev 2019-06-24 14:41 ` [PATCH v5 13/14] epoll: implement epoll_create2() syscall Roman Penyaev 2019-06-24 16:14 ` Arnd Bergmann 2019-06-24 16:25 ` Roman Penyaev 2019-06-25 18:29 ` Eric Wong 2019-06-24 14:41 ` [PATCH v5 14/14] kselftest: add uepoll-test which tests polling from userspace Roman Penyaev 2019-06-24 20:38 ` [PATCH v5 00/14] epoll: support pollable epoll " Linus Torvalds 2019-06-25 11:19 ` Roman Penyaev 2019-06-25 0:24 ` Eric Wong 2019-06-25 11:07 ` Roman Penyaev [this message]
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 \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --subject='Re: [PATCH v5 00/14] epoll: support pollable epoll from userspace' \ /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
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).