From: jgmyers@netscape.com (John Myers)
To: Dan Kegel <dank@kegel.com>
Cc: Benjamin LaHaise <bcrl@redhat.com>,
Shailabh Nagar <nagar@watson.ibm.com>,
linux-kernel <linux-kernel@vger.kernel.org>,
linux-aio <linux-aio@kvack.org>, Andrew Morton <akpm@digeo.com>,
David Miller <davem@redhat.com>,
Linus Torvalds <torvalds@transmeta.com>,
Stephen Tweedie <sct@redhat.com>
Subject: Re: [PATCH] async poll for 2.5
Date: Tue, 15 Oct 2002 14:50:04 -0700 [thread overview]
Message-ID: <3DAC8D8C.8060000@netscape.com> (raw)
In-Reply-To: 3DAC840E.A601C318@kegel.com
[-- Attachment #1: Type: text/plain, Size: 2703 bytes --]
Dan Kegel wrote:
>The most effective way to use something like /dev/epoll in a
>multithreaded
>program might be to have one thread call "get next batch of events",
>then divvy up the events across multiple threads.
>
That is a tautology. As /dev/epoll is inherently a single threaded
interface, of course the most effective way for a multithreaded program
to use it is to have one thread call it then divvy up the events.
That's the *only* way a multithreaded program can deal with a single
threaded interface.
The cost to divvy up the events can be substantial, not the mention the
cost of funneling them all through a single CPU. This cost can easily
be greater than what one saves by combining events. io_getevents() is a
great model for divvying events across multiple threads, the poll
facility should work with that model.
The solution for optimizing the amount of event collapsing is to
implement concurrency control.
>Once you allow that, it's easy to handle the
>condition you're worried about by generating a spurious readiness
>indication when registering a fd. That's what I do in my wrapper
>library.
>
This is a workaround. You are adding additional code and complexity to
the caller in order to deal with a deficiency in the interface. This
has several problems:
Someone writing to the /dev/epoll interface needs to know that they need
to write such workaround code. If they don't know to write the code or
if they make an error in the workaround code, it is still likely that
the program will pass testing. What will result are intermittent, hard
to diagnose failures in production.
User space does not have the information to address this as well as the
kernel can. As a result, the workaround requires more processing in the
common, non racy case.
The kernel can clearly handle this situation better than user space. It
can do the necessary checks while it is still holding the necessary
locks. It is less error prone to handle the situation in the kernel.
The logic clearly belongs in the kernel.
>Also, because /dev/epoll and friends are single-shot notifications of
>*changes* in readiness, there is little reason to register interest in
>this or that event, and change that interest over time; instead,
>apps should simply register interest in any event they might ever
>be interested in.
>
You're making assumptions about the structure and flow of an
application. Sometimes when an application stops having interest in
this or that event, it needs to free/invalidate the context associated
with that event.
So that's fine as a strategy for amortizing the cost of
registration/deregistration, but it isn't universally applicable.
[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/x-pkcs7-signature, Size: 3537 bytes --]
next prev parent reply other threads:[~2002-10-15 21:44 UTC|newest]
Thread overview: 138+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-10-14 22:36 [PATCH] async poll for 2.5 Shailabh Nagar
2002-10-14 22:54 ` John Myers
2002-10-15 15:05 ` Benjamin LaHaise
2002-10-15 17:06 ` Dan Kegel
2002-10-15 17:03 ` Benjamin LaHaise
2002-10-15 17:18 ` Dan Kegel
2002-10-16 2:11 ` Lincoln Dale
2002-10-15 18:09 ` Shailabh Nagar
2002-10-15 18:53 ` Dan Kegel
2002-10-15 18:57 ` Benjamin LaHaise
2002-10-15 20:25 ` John Gardiner Myers
2002-10-15 21:09 ` Dan Kegel
2002-10-15 21:50 ` John Myers [this message]
2002-10-15 22:33 ` Davide Libenzi
2002-10-15 22:56 ` John Gardiner Myers
2002-10-15 23:23 ` Davide Libenzi
2002-10-16 19:16 ` John Myers
2002-10-15 21:11 ` Davide Libenzi
2002-10-15 22:01 ` John Gardiner Myers
2002-10-15 22:27 ` Davide Libenzi
2002-10-15 22:36 ` John Gardiner Myers
2002-10-15 22:41 ` Benjamin LaHaise
2002-10-15 23:26 ` John Gardiner Myers
2002-10-15 23:05 ` Davide Libenzi
2002-10-15 23:33 ` John Gardiner Myers
2002-10-16 0:05 ` Davide Libenzi
2002-10-16 0:15 ` John Myers
2002-10-16 14:25 ` Davide Libenzi
2002-10-16 18:15 ` John Gardiner Myers
2002-10-16 19:20 ` Davide Libenzi
2002-10-16 23:31 ` epoll (was Re: [PATCH] async poll for 2.5) John Gardiner Myers
2002-10-16 23:51 ` Davide Libenzi
2002-10-17 18:06 ` John Gardiner Myers
2002-10-17 18:33 ` Davide Libenzi
2002-10-18 19:02 ` John Gardiner Myers
2002-10-18 19:52 ` Davide Libenzi
2002-10-19 0:55 ` John Myers
2002-10-19 5:40 ` Davide Libenzi
2002-10-19 6:59 ` Mark Mielke
2002-10-19 17:26 ` Davide Libenzi
2002-10-19 17:48 ` Dan Kegel
2002-10-19 18:52 ` Charles 'Buck' Krasic
2002-10-19 20:18 ` Charles 'Buck' Krasic
2002-10-19 21:08 ` Dan Kegel
2002-10-22 19:35 ` John Gardiner Myers
2002-10-22 20:06 ` Davide Libenzi
2002-10-22 21:54 ` Erich Nahum
2002-10-22 22:17 ` Dan Kegel
2002-10-22 22:25 ` Davide Libenzi
2002-10-18 21:01 ` Charles 'Buck' Krasic
2002-10-18 21:33 ` Davide Libenzi
2002-10-19 1:05 ` John Myers
2002-10-19 1:27 ` Tervel Atanassov
2002-10-19 18:52 ` John G. Myers
2002-10-19 4:07 ` Charles 'Buck' Krasic
2002-10-16 20:06 ` [PATCH] async poll for 2.5 Mark Mielke
2002-10-16 23:48 ` epoll (was Re: [PATCH] async poll for 2.5) John Gardiner Myers
2002-10-17 0:23 ` Davide Libenzi
2002-10-17 17:45 ` John Myers
2002-10-16 2:45 ` [PATCH] async poll for 2.5 Charles 'Buck' Krasic
2002-10-16 14:28 ` Davide Libenzi
2002-10-17 18:47 ` Charles 'Buck' Krasic
2002-10-17 19:20 ` Davide Libenzi
2002-10-18 3:30 ` Dan Kegel
2002-10-16 18:29 ` John Gardiner Myers
2002-10-16 20:39 ` Charles 'Buck' Krasic
2002-10-17 17:59 ` epoll (was Re: [PATCH] async poll for 2.5) John Gardiner Myers
2002-10-21 16:58 ` [PATCH] async poll for 2.5 Alan Cox
2002-10-21 16:50 ` Benjamin LaHaise
2002-10-16 19:59 ` Dan Kegel
2002-10-16 20:03 ` Dan Kegel
2002-10-17 17:43 ` epoll (was Re: [PATCH] async poll for 2.5) John Myers
2002-10-18 17:00 ` Mark Mielke
2002-10-18 17:28 ` Dan Kegel
2002-10-18 17:41 ` Davide Libenzi
2002-10-18 18:55 ` Mark Mielke
2002-10-18 19:16 ` Davide Libenzi
2002-10-19 6:56 ` Mark Mielke
2002-10-19 16:10 ` Charles 'Buck' Krasic
2002-10-22 17:22 ` Mark Mielke
2002-10-22 17:46 ` Dan Kegel
2002-10-22 17:47 ` Davide Libenzi
2002-10-22 18:13 ` Alan Cox
2002-10-22 18:18 ` Davide Libenzi
2002-10-22 18:37 ` Benjamin LaHaise
2002-10-22 19:22 ` John Gardiner Myers
2002-10-22 19:28 ` Benjamin LaHaise
2002-10-22 19:50 ` John Gardiner Myers
2002-10-22 20:00 ` Benjamin LaHaise
2002-10-22 20:23 ` async poll John Myers
2002-10-23 11:10 ` Latest aio code (was Re: [PATCH] async poll for 2.5) Suparna Bhattacharya
2002-10-22 19:49 ` epoll " Davide Libenzi
2002-10-22 18:42 ` Charles 'Buck' Krasic
2002-10-22 19:35 ` Davide Libenzi
2002-10-23 16:49 ` Dan Kegel
2002-10-23 17:39 ` Benjamin LaHaise
2002-10-23 18:47 ` Davide Libenzi
2002-10-23 21:18 ` Benjamin LaHaise
2002-10-23 21:35 ` Davide Libenzi
2002-10-23 21:39 ` John Gardiner Myers
2002-10-23 21:54 ` Davide Libenzi
2002-10-23 17:49 ` Charles 'Buck' Krasic
2002-10-23 18:14 ` Davide Libenzi
2002-10-23 18:32 ` Charles 'Buck' Krasic
2002-10-23 20:36 ` async poll John Myers
2002-10-23 20:57 ` Dan Kegel
2002-10-23 21:23 ` John Gardiner Myers
2002-10-23 21:51 ` Davide Libenzi
2002-10-23 21:51 ` bert hubert
2002-10-23 22:10 ` Davide Libenzi
2002-10-23 21:54 ` John Gardiner Myers
2002-10-23 22:22 ` Davide Libenzi
2002-10-23 22:29 ` John Gardiner Myers
2002-10-23 22:50 ` Davide Libenzi
2002-10-24 7:32 ` Eduardo Pérez
2002-10-24 15:05 ` Charles 'Buck' Krasic
2002-10-23 22:24 ` Dan Kegel
2002-10-23 22:30 ` Davide Libenzi
2002-10-23 22:53 ` Davide Libenzi
2002-10-23 21:13 ` Charles 'Buck' Krasic
2002-10-19 17:19 ` epoll (was Re: [PATCH] async poll for 2.5) Davide Libenzi
2002-10-18 18:55 ` Chris Friesen
2002-10-18 19:00 ` Mark Mielke
2002-10-15 17:38 ` [PATCH] async poll for 2.5 Shailabh Nagar
2002-10-15 17:50 ` Benjamin LaHaise
2002-10-15 18:16 ` Davide Libenzi
2002-10-15 18:18 ` Shailabh Nagar
2002-10-15 19:00 ` Davide Libenzi
2002-10-15 19:02 ` Benjamin LaHaise
2002-10-15 18:59 ` Shailabh Nagar
2002-10-15 19:16 ` Davide Libenzi
2002-10-15 19:12 ` Benjamin LaHaise
2002-10-15 19:31 ` Davide Libenzi
2002-10-15 19:38 ` Dan Kegel
2002-10-15 19:55 ` Davide Libenzi
2002-10-15 20:36 ` John Gardiner Myers
2002-10-15 20:39 ` Benjamin LaHaise
2002-10-15 19:02 ` Davide Libenzi
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=3DAC8D8C.8060000@netscape.com \
--to=jgmyers@netscape.com \
--cc=akpm@digeo.com \
--cc=bcrl@redhat.com \
--cc=dank@kegel.com \
--cc=davem@redhat.com \
--cc=linux-aio@kvack.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nagar@watson.ibm.com \
--cc=sct@redhat.com \
--cc=torvalds@transmeta.com \
/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;
as well as URLs for NNTP newsgroup(s).