From: Dan Kegel <dank@alumni.caltech.edu>
To: Linus Torvalds <torvalds@transmeta.com>
Cc: "Eric W. Biederman" <ebiederm@biederman.org>,
Helge Hafting <helgehaf@idb.hist.no>,
linux-kernel@vger.kernel.org
Subject: Re: Linux's implementation of poll() not scalable?
Date: Thu, 26 Oct 2000 17:47:23 -0700 [thread overview]
Message-ID: <39F8D09B.F55AD0FD@alumni.caltech.edu> (raw)
In-Reply-To: <Pine.LNX.4.10.10010260936330.2460-100000@penguin.transmeta.com>
Linus Torvalds wrote:
> However, we also need to remember what got us to this discussion in the
> first place. One of the reasons why poll() is such a piggy interface is
> exactly because it tries to be "nice" to the programmer.
poll() is a piggy interface because it is O(n) in polled file
descriptors, not because of its level-triggered nature.
> I'd much rather have an event interface that is documented to be edge-
> triggered and is really _lightweight_, than have another interface that
> starts out with some piggy features.
Agreed (except for that 'edge-triggered' part), but I don't think
'level-triggered' implies piggy. I haven't benchmarked whether
kqueue() slows down the networking layer of FreeBSD yet; do you
suspect maintaining the level-triggered structures actually is
a bottleneck for them?
> I do understand that level to some degree is "nicer", but everybody pretty
> much agrees that apart from requireing more care, edge-triggered certainly
> does everything the level-triggered interfaces do.
Agreed.
> For example, if you want to only partially handle an event (one of the
> more valid arguments I've seen, although I do not agree with it actually
> being all that common or important thing to do), the edge-triggered
> interface _does_ allow for that. It's fairly easy, in fact: you just
> re-bind the thing.
>
> (My suggested "bind()" interface would be to just always add a newly bound
> fd to the event queue, but I would not object to a "one-time test for
> active" kind of "bind()" interface either - which would basically allow
> for a poll() interface - and the existing Linux internal "poll()"
> implementation actually already allows for exactly this so it wouldn't
> even add any complexity).
> ... the "re-bind()" approach works very simply, and means that the
> overhead of testing whether the event is still active is not a generic
> thing that _always_ has to be done, but something where the application
> can basically give the kernel the information that "this time we're
> leaving the event possibly half-done, please re-test now".
Hmm. I don't like the extra system call, though. Any chance you'd be
willing to make get_events() take a vector of bind requests, so we can
avoid the system call overhead of re-binding? (Or is that too close
to kqueue for you?)
And are you sure apps will always know whether they need to rebind?
Sometimes you're faced with a protocol stack which may or may not
read the requests fully, and which you aren't allowed to change.
It'd be nice to still have a high-performance interface that can deal with
that situation.
- Dan
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/
next prev parent reply other threads:[~2000-10-27 0:47 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <Pine.LNX.4.10.10010241121340.1704-100000@penguin.transmeta.com>
[not found] ` <39F61766.FC5D2D81@alumni.caltech.edu>
[not found] ` <39F6A412.DE378865@idb.hist.no>
[not found] ` <39F7054C.72FB3EA8@alumni.caltech.edu>
[not found] ` <m1aebs9i74.fsf@frodo.biederman.org>
2000-10-26 16:20 ` Linux's implementation of poll() not scalable? Dan Kegel
2000-10-26 16:44 ` Linus Torvalds
2000-10-26 19:51 ` Jim Gettys
2000-10-26 21:48 ` Dan Kegel
2000-10-27 13:56 ` Chris Swiedler
2000-10-27 0:47 ` Dan Kegel [this message]
[not found] <local.mail.linux-kernel/39F8D09B.F55AD0FD@alumni.caltech.edu>
[not found] ` <local.mail.linux-kernel/Pine.LNX.4.10.10010260936330.2460-100000@penguin.transmeta.com>
2000-10-27 1:35 ` Jonathan Lemon
2000-10-28 0:46 John Gardiner Myers
[not found] <39F529CC.2538300@alumni.caltech.edu>
2000-10-30 22:22 ` Mike Jagdis
2000-11-01 16:09 ` Dan Kegel
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=39F8D09B.F55AD0FD@alumni.caltech.edu \
--to=dank@alumni.caltech.edu \
--cc=ebiederm@biederman.org \
--cc=helgehaf@idb.hist.no \
--cc=linux-kernel@vger.kernel.org \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.