mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "Matthew D. Hall" <mhall@free-market.net>
To: Jamie Lokier <lk@tantalophile.demon.co.uk>
Cc: Davide Libenzi <davidel@xmailserver.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	linux-aio@kvack.org, lse-tech@lists.sourceforge.net,
	Linus Torvalds <torvalds@transmeta.com>,
	Andrew Morton <akpm@digeo.com>,
	Alan Cox <alan@lxorguk.ukuu.org.uk>
Subject: Re: Unifying epoll,aio,futexes etc. (What I really want from epoll)
Date: Thu, 31 Oct 2002 17:55:07 -0800	[thread overview]
Message-ID: <3DC1DEFB.6070206@free-market.net> (raw)
In-Reply-To: <20021031230215.GA29671@bjl1.asuk.net>

If I may respectfully weigh in...

If a new API and/or a significant change in semantics is to be applied 
to the kernel for a unified event notification system, this is obviously 
an issue for 2.7 or 2.9.  As such, we have plenty of time to focus upon 
simplicity and correctness rather than plain old inertia.  We need to 
bring a truly unified, and therefore new, event API to the kernel, and 
it must be done right.  kevent attempts to achieve this for FreeBSD, and 
generally speaking, it succeeds.  But linux can do much better.

The API should present the notion of a general edge-triggered event 
(e.g. I/O upon sockets, pipes, files, timers, etc.), and it should do so 
simply.  Linus made some suggestions on lkml back in 2000 
(http://marc.theaimsgroup.com/?l=linux-kernel&m=97236943118139&w=2) that 
pretty much hit the nail on the head -- with some exceptions.

*  Unless every conceivable event is to be represented as a file (rather 
unintuitive IMHO), his proposed interface fails to accomodate non-I/O 
events (e.g. timers,  signals, directory updates, etc.).  As much as I 
appreciate the UNIX Way, making everything a file is a massive 
oversimplification.  We can often stretch the definition far enough to 
make this work, but I'd be impressed to see how one intends to call, 
e.g., a timer a type of file.

*  There is a seemingly significant overhead in performing exactly one 
callback per event.  Doesn't this prevent any kind of event coalescence? 
 It seems like we could be doing an awful lot of cache thrashing, among 
other things.  In some cases, this might happen anyway, but why should 
the interface enforce such behavior?  In most other cases, it's 
perfectly acceptable to inline an event handler (either via compile-time 
inlining or literally).  I do realize that Linus only suggested that the 
C library do the mass callbacks, BTW, so strictly speaking, it's the 
userland API that would "enforce such behavior."  Nonetheless, this is 
of concern.

Enough of what we shouldn't do.  Here's what we should:

*  The interface should allow the implementation to be highly extensible 
without horrible code contortions within the kernel.  It is important to 
be able to add new types of events as they become necessary.  The 
interface should be general and simple enough to accomodate these 
extensions.  Linux (really, UNIX) has failed to exercise this foresight 
in the past, and that's why we have the current mess of varied 
polling/triggering methods.

*  I might be getting a bit utopian here, but IMHO the kernel should 
move toward a completely edge-triggered event system.  The old 
level-triggered interfaces should only wrap this paradigm.

*  Might as well reiterate: simplicity.  FreeBSD's kevent solves nearly 
all of the traditional problems, but it is gross.  And complicated. 
 There were clearly too many computer scientists and not enough 
engineers on that team.

*  Only one queue per process or kernel thread.  Multiple queues per 
flow of execution is just ugly and ultimately pointless.  That is not to 
say that you can't multithread, but each thread simply uses the same 
queue.  In cases when you want one thread to only wait on a certain 
type(s) of event, you can do this as well; you just can't have one 
thread juggling more than one queue.  Since the event notification is 
edge-triggered, I cannot see any reason for a significant performance 
degradation resulting from this policy.  I am not altogether convinced 
that this must be a strict policy, however; the issue of different 
userspace threads having different event queues inside the same task is 
interesting.

*  No re-arming events.  They must be manually killed.

*  I'm sure everyone would agree that passing an opaque "user context" 
pointer is necessary with each event.

*  Zero-copy event delivery (of course).

Some question marks:
-  Should the kernel attempt to prune the queue of "cancelled" events 
(hints later deemed irrelevant, untrue, or obsolete by newer events)?
-  Is one-queue-per-task really the way to go?  This stops many bad 
practices but could prevent some decent ones (see user threads comment).

Matthew D. Hall



  parent reply	other threads:[~2002-11-01  1:49 UTC|newest]

Thread overview: 117+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-10-28 19:14 [PATCH] epoll more scalable than poll Hanna Linder
2002-10-28 20:10 ` Hanna Linder
2002-10-28 20:56 ` Martin Waitz
2002-10-28 22:02   ` bert hubert
2002-10-28 22:15     ` bert hubert
2002-10-28 22:17   ` Davide Libenzi
2002-10-28 22:08 ` bert hubert
2002-10-28 22:12   ` [Lse-tech] " Shailabh Nagar
2002-10-28 22:37     ` Davide Libenzi
2002-10-28 22:29   ` Davide Libenzi
2002-10-28 22:58     ` and nicer too - " bert hubert
2002-10-28 23:23       ` Davide Libenzi
2002-10-28 23:45       ` John Gardiner Myers
2002-10-29  0:08         ` Davide Libenzi
2002-10-29 12:59           ` Martin Waitz
2002-10-29 15:19             ` bert hubert
2002-10-29 22:54               ` Martin Waitz
2002-10-30  2:24                 ` Davide Libenzi
2002-10-30 19:38                   ` Martin Waitz
2002-10-31  5:04                     ` Davide Libenzi
2002-10-29  0:18         ` bert hubert
2002-10-29  0:32           ` Davide Libenzi
2002-10-29  0:40             ` bert hubert
2002-10-29  0:57               ` Davide Libenzi
2002-10-29  0:53                 ` bert hubert
2002-10-29  1:13                   ` Davide Libenzi
2002-10-29  1:08                     ` [Lse-tech] " Hanna Linder
2002-10-29  1:39                       ` Davide Libenzi
2002-10-29  2:05                   ` Jamie Lokier
2002-10-29  2:44                     ` Davide Libenzi
2002-10-29  4:01                       ` [PATCH] Updated sys_epoll now with man pages Hanna Linder
2002-10-29  5:09                         ` Andrew Morton
2002-10-29  5:28                           ` [Lse-tech] " Randy.Dunlap
2002-10-29  5:47                             ` Davide Libenzi
2002-10-29  5:41                               ` Randy.Dunlap
2002-10-29  6:12                                 ` Davide Libenzi
2002-10-29  6:03                                   ` Randy.Dunlap
2002-10-29  6:23                                     ` Davide Libenzi
2002-10-29 14:59                             ` Paul Larson
2002-10-29  5:31                           ` Davide Libenzi
2002-10-29  7:34                           ` Davide Libenzi
2002-10-29 11:04                           ` bert hubert
2002-10-29 15:30                           ` [Lse-tech] " Shailabh Nagar
2002-10-29 17:45                             ` Davide Libenzi
2002-10-29 19:30                               ` Hanna Linder
2002-10-29 19:49                                 ` Davide Libenzi
2002-10-29 13:09                 ` and nicer too - Re: [PATCH] epoll more scalable than poll bert hubert
2002-10-29 21:25                   ` Davide Libenzi
2002-10-29 21:23                     ` Hanna Linder
2002-10-29 21:41                       ` Davide Libenzi
2002-10-29 23:06                         ` Hanna Linder
2002-10-29 23:14                           ` [Lse-tech] " Randy.Dunlap
2002-10-29 23:25                           ` Davide Libenzi
2002-10-29  1:47           ` Security critical race condition in epoll code John Gardiner Myers
2002-10-29  2:13             ` Davide Libenzi
2002-10-29  3:38             ` Davide Libenzi
2002-10-29 19:49           ` and nicer too - Re: [PATCH] epoll more scalable than poll John Gardiner Myers
2002-10-29 21:03             ` Davide Libenzi
2002-10-30  0:26               ` Jamie Lokier
2002-10-30  2:09                 ` Davide Libenzi
2002-10-30  5:51                 ` Davide Libenzi
2002-10-30  2:22               ` John Gardiner Myers
2002-10-30  3:51                 ` Davide Libenzi
2002-10-31  2:07                   ` John Gardiner Myers
2002-10-31  3:21                     ` Davide Libenzi
2002-10-31 11:10                       ` [Lse-tech] " Suparna Bhattacharya
2002-10-31 18:42                         ` Davide Libenzi
2002-10-30 23:01                 ` Jamie Lokier
2002-10-30 23:53                   ` Davide Libenzi
2002-10-31  0:52                     ` Jamie Lokier
2002-10-31  4:15                       ` Davide Libenzi
2002-10-31 15:07                         ` Jamie Lokier
2002-10-31 19:10                           ` Davide Libenzi
2002-11-01 17:42                             ` Dan Kegel
2002-11-01 17:45                               ` Davide Libenzi
2002-11-01 18:41                                 ` Dan Kegel
2002-11-01 19:16                               ` Jamie Lokier
2002-11-01 20:04                                 ` Charlie Krasic
2002-11-01 20:14                                   ` Jamie Lokier
2002-11-01 20:22                                 ` Mark Mielke
2002-10-31 15:41                         ` Unifying epoll,aio,futexes etc. (What I really want from epoll) Jamie Lokier
2002-10-31 15:48                           ` bert hubert
2002-10-31 16:45                           ` Alan Cox
2002-10-31 22:00                             ` Rusty Russell
2002-11-01  0:32                               ` Jamie Lokier
2002-11-01 13:23                               ` Alan Cox
2002-10-31 20:28                           ` Davide Libenzi
2002-10-31 23:02                             ` Jamie Lokier
2002-11-01  1:01                               ` Davide Libenzi
2002-11-01  2:01                                 ` Jamie Lokier
2002-11-01 17:36                                   ` Davide Libenzi
2002-11-01 23:27                                   ` John Gardiner Myers
2002-11-02  4:55                                     ` Mark Mielke
2002-11-05 18:15                                       ` pipe POLLOUT oddity John Gardiner Myers
2002-11-05 18:18                                         ` Benjamin LaHaise
2002-11-02 15:41                                     ` Unifying epoll,aio,futexes etc. (What I really want from epoll) Jamie Lokier
2002-11-01 20:45                                 ` Jamie Lokier
2002-11-01  1:55                               ` Matthew D. Hall [this message]
2002-11-01  2:54                                 ` Davide Libenzi
2002-11-01 18:18                                   ` Dan Kegel
2002-11-01  2:56                                 ` Jamie Lokier
2002-11-01 23:16                                 ` John Gardiner Myers
2002-11-01  4:29                               ` Mark Mielke
2002-11-01  4:59                                 ` Jamie Lokier
2002-10-30 18:59               ` and nicer too - Re: [PATCH] epoll more scalable than poll Zach Brown
2002-10-30 19:25                 ` Davide Libenzi
2002-10-31 16:54                 ` Davide Libenzi
2002-10-28 23:44     ` Jamie Lokier
2002-10-29  0:02       ` Davide Libenzi
2002-10-29  1:51         ` Jamie Lokier
2002-10-29  5:06           ` Davide Libenzi
2002-10-29 11:20             ` Jamie Lokier
2002-10-30  0:16               ` Davide Libenzi
2002-10-29  0:03       ` bert hubert
2002-10-29  0:20         ` Davide Libenzi
2002-10-29  0:48         ` Jamie Lokier
2002-10-29  1:53           ` Jamie Lokier

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=3DC1DEFB.6070206@free-market.net \
    --to=mhall@free-market.net \
    --cc=akpm@digeo.com \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=davidel@xmailserver.org \
    --cc=linux-aio@kvack.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lk@tantalophile.demon.co.uk \
    --cc=lse-tech@lists.sourceforge.net \
    --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

all inboxes | Powered by JetHome®