mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "Randy.Dunlap" <rdunlap@xenotime.net>
To: Nicholas Miell <nmiell@comcast.net>
Cc: Evgeniy Polyakov <johnpol@2ka.mipt.ru>,
	lkml <linux-kernel@vger.kernel.org>,
	David Miller <davem@davemloft.net>,
	Ulrich Drepper <drepper@redhat.com>,
	Andrew Morton <akpm@osdl.org>, netdev <netdev@vger.kernel.org>,
	Zach Brown <zach.brown@oracle.com>,
	Christoph Hellwig <hch@infradead.org>
Subject: Re: [take12 0/3] kevent: Generic event handling mechanism.
Date: Tue, 22 Aug 2006 16:22:06 -0700	[thread overview]
Message-ID: <20060822162206.a766ec90.rdunlap@xenotime.net> (raw)
In-Reply-To: <1156287492.2476.134.camel@entropy>

On Tue, 22 Aug 2006 15:58:12 -0700 Nicholas Miell wrote:

> On Tue, 2006-08-22 at 14:37 -0700, Randy.Dunlap wrote:
> > On Tue, 22 Aug 2006 14:13:02 -0700 Nicholas Miell wrote:
> > 
> > > On Wed, 2006-08-23 at 00:16 +0400, Evgeniy Polyakov wrote:
> > > > On Tue, Aug 22, 2006 at 12:57:38PM -0700, Nicholas Miell (nmiell@comcast.net) wrote:
> > > > > On Tue, 2006-08-22 at 14:03 +0400, Evgeniy Polyakov wrote:
> > > > > Of course, since you already know how all this stuff is supposed to
> > > > > work, you could maybe write it down somewhere?
> > > > 
> > > > I will write documantation, but as you can see some interfaces are
> > > > changed.
> > > 
> > > Thanks; rapidly changing interfaces need good documentation even more
> > > than stable interfaces simply because reverse engineering the intended
> > > API from a changing implementation becomes even more difficult.
> > 
> > OK, I don't quite get it.
> > Can you be precise about what you would like?
> > 
> > a.  good documentation
> > b.  a POSIX API
> > c.  a Windows-compatible API
> > d.  other?
> > 
> > and we won't make you use any of this code.
> 
> I want something that I can be confident won't be replaced again in two
> years because nobody noticed problems with the old API design or they're
> just feeling very NIH with their snazzy new feature.
> 
> Maybe then we won't end up with another in the { signal/sigaction,
> waitpid/wait4, select/pselect, poll/ppol,  msgrcv, mq_receive,
> io_getevents, aio_suspend/aio_return, epoll_wait, inotify read,
> kevent_get_events } collection -- or do you like having a maze of
> twisted interfaces, all subtly different and none supporting the
> complete feature set?
> 
> Good documentation giving enough detail to judge the design and an API
> that fits with the current POSIX API (at least, the parts that everybody
> agrees don't suck) goes a long way toward assuaging my fears that this
> won't just be another waste of effort, doomed to be replaced by the Next
> Great Thing (We Really Mean It This Time!) in unified event loop API
> design or whatever other interface somebody happens to be working on.
> 
> ---

OK, thank you for elaborating.

I suppose that I am more <choose one> {cynical, sarcastic,
practial, pragmatic}.  I don't have a crystal ball for 2 years
out and I don't know anyone who does.

IMO we do the best that we can given some human constraints
and probably some marketplace constraints (like ship something
instead of playing with it for 5 years before shipping it).


> This is made extraordinarily difficult by the fact kernel people don't
> even agree themselves on what APIs should look like anyway and Linus
> won't take a stand on the issue -- people with influence are
> simultaneously arguing things like:
> 
> - ioctls are bad because they aren't typesafe and you should use
> syscalls instead because they are typesafe
> 
> - ioctls are good, because they're much easier to add than syscalls,
> type safety can be supplied by the library wrapper, and syscalls are a
> (relatively) scarce resource, harder to wire up in the first place, and
> are more difficult to make optional or remove entirely if you decide
> they were a stupid idea.

Yes, I was recently part of that argument in Ottawa.

> - multiplexors are bad because they're too complex or not typesafe
> 
> - multiplexors are good because they save syscall slots or ioctl numbers
> and the library wrapper provides the typesafety anyway.

Multiplexors have already lost AFAIK.  Unless someone changes their
mind.  Which happens and will continue to happen.

> - instead of syscalls or ioctls, you should create a whole new
> filesystem that has a bunch of magic files that you read from and write
> to in order to talk to the kernel

Yep.  Some people like that one.  Not everyone.

> - filesystem interfaces are bad, because they're take more effort to
> write than a syscall or a ioctl and nobody seems to know how to maintain
> and evolve a filesystem-based ABI or make them easy to use outside of a
> fragile shell script (see: sysfs)

Ack.

> - that everything in those custom filesystems should ASCII strings and
> nobody needs an actual grammar describing how to parse them, we can just
> break userspace whenever we feel like it

sysfs requires one value per file.  Little parsing required.
But I don't know how to capture atomic values from N files with sysfs.

> - that everything in those custom filesystems should be C structs, and
> screw the shell scripts

Hm, I don't recall that one.

> - new filesystem metadata should be exposed by:
> 	- xattrs
> 	- ioctls
> 	- new syscalls
> 		or
> 	- named streams/forks/not-xattrs
>   and three out of four of these suggestions are completely wrong for
>   some critical reason
> 
> - meanwhile, the networking folks are doing everything via AF_NETLINK
> sockets instead of syscalls or ioctl or whatever, I guess because the
> network stack is what's most familiar to them

I sympathize with you on that one.  I don't care for netlink much
either.  To me it's still an ioctl, even though it is routable
and extensible.

> - and there's the usual arguments about typedefs verses bare struct
> names, #defines verses enums, returning 0 on success vs. 0 on failure,
> and lots of other piddly stupid stuff that somebody just needs to say
> "this is how it's done and no arguing" about.

That's all part of the open-source development process.  Sorry
you dislike it.

> Honestly, somebody with enough clout to make it stick needs to write out
> a spec describing what new kernel interfaces should look like and how
> they should fit in with existing interfaces.

I only know 2 people who could make it stick.

> It'd probably make Evgeniy's life easier if you could just point at the
> interface guidelines and say "you did this wrong" instead of random
> people telling him to change his design and random other people telling
> him to change it back.

I agree.  We went thru some of this at the kernel summit.
The ioctls dissent topic didn't really have many dissenters.
(That was a surprise to me.)

Anyway, thanks again for the additional details.

---
~Randy

  parent reply	other threads:[~2006-08-22 23:19 UTC|newest]

Thread overview: 144+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <12345678912345.GA1898@2ka.mipt.ru>
2006-08-17  7:43 ` [take11 " Evgeniy Polyakov
2006-08-17  7:43   ` [take11 1/3] kevent: Core files Evgeniy Polyakov
2006-08-17  7:43     ` [take11 2/3] kevent: poll/select() notifications Evgeniy Polyakov
2006-08-17  7:43       ` [take11 3/3] kevent: Timer notifications Evgeniy Polyakov
2006-08-21 10:19 ` [take12 0/3] kevent: Generic event handling mechanism Evgeniy Polyakov
2006-08-21 10:19   ` [take12 1/3] kevent: Core files Evgeniy Polyakov
2006-08-21 10:19     ` [take12 2/3] kevent: poll/select() notifications Evgeniy Polyakov
2006-08-21 10:19       ` [take12 3/3] kevent: Timer notifications Evgeniy Polyakov
2006-08-21 11:12         ` Christoph Hellwig
2006-08-21 11:18           ` Evgeniy Polyakov
2006-08-21 11:27             ` Arjan van de Ven
2006-08-21 11:59               ` Evgeniy Polyakov
2006-08-21 12:13                 ` Arjan van de Ven
2006-08-21 12:25                   ` Evgeniy Polyakov
2006-08-21 14:25             ` Thomas Gleixner
2006-08-22 18:25               ` Evgeniy Polyakov
2006-08-21 12:09           ` Evgeniy Polyakov
2006-08-22  4:36             ` Andrew Morton
2006-08-22  5:48               ` Evgeniy Polyakov
2006-08-21 12:37         ` [take12 4/3] kevent: Comment cleanup Evgeniy Polyakov
2006-08-23  8:51     ` [take12 1/3] kevent: Core files Eric Dumazet
2006-08-23  9:18       ` Evgeniy Polyakov
2006-08-23  9:23         ` Eric Dumazet
2006-08-23  9:29           ` Evgeniy Polyakov
2006-08-22  7:00   ` [take12 0/3] kevent: Generic event handling mechanism Nicholas Miell
2006-08-22  7:24     ` Evgeniy Polyakov
2006-08-22  8:17       ` Nicholas Miell
2006-08-22  8:23         ` David Miller
2006-08-22  8:59           ` Nicholas Miell
2006-08-22 14:59             ` James Morris
2006-08-22 20:00               ` Nicholas Miell
2006-08-22 20:36                 ` David Miller
2006-08-22 21:13                   ` Nicholas Miell
2006-08-22 21:25                     ` David Miller
2006-08-22 22:58                       ` Nicholas Miell
2006-08-22 23:46                         ` Ulrich Drepper
2006-08-23  1:51                           ` Nicholas Miell
2006-08-23  6:54                           ` Evgeniy Polyakov
2006-08-22  8:37         ` Evgeniy Polyakov
2006-08-22  9:29           ` Nicholas Miell
2006-08-22 10:03             ` Evgeniy Polyakov
2006-08-22 19:57               ` Nicholas Miell
2006-08-22 20:16                 ` Evgeniy Polyakov
2006-08-22 21:13                   ` Nicholas Miell
2006-08-22 21:37                     ` Randy.Dunlap
2006-08-22 22:01                       ` Andrew Morton
2006-08-22 22:17                         ` David Miller
2006-08-22 23:35                           ` Andrew Morton
2006-08-22 22:58                       ` Nicholas Miell
2006-08-22 23:06                         ` David Miller
2006-08-23  1:36                           ` The Proposed Linux kevent API (was: Re: [take12 0/3] kevent: Generic event handling mechanism.) Nicholas Miell
2006-08-23  2:01                             ` The Proposed Linux kevent API Howard Chu
2006-08-23  3:31                             ` David Miller
2006-08-23  3:47                               ` Nicholas Miell
2006-08-23  4:23                                 ` Nicholas Miell
2006-08-23  6:22                             ` The Proposed Linux kevent API (was: Re: [take12 0/3] kevent: Generic event handling mechanism.) Evgeniy Polyakov
2006-08-23  8:01                               ` Nicholas Miell
2006-08-23 18:24                             ` The Proposed Linux kevent API Stephen Hemminger
2006-08-22 23:22                         ` Randy.Dunlap [this message]
     [not found]         ` <b3f268590608220957g43a16d6bmde8a542f8ad8710b@mail.gmail.com>
2006-08-22 17:09           ` [take12 0/3] kevent: Generic event handling mechanism Jari Sundell
2006-08-22 18:01           ` Evgeniy Polyakov
2006-08-22 19:14             ` Jari Sundell
2006-08-22 19:47               ` Evgeniy Polyakov
2006-08-22 22:51                 ` Jari Sundell
2006-08-22 23:11                   ` Alexey Kuznetsov
2006-08-23  0:28                     ` Jari Sundell
2006-08-23  0:32                       ` David Miller
2006-08-23  0:43                         ` Jari Sundell
2006-08-23  6:56                           ` Evgeniy Polyakov
2006-08-23  7:07                             ` Andrew Morton
2006-08-23  7:10                               ` Evgeniy Polyakov
2006-08-23  9:58                                 ` Andi Kleen
2006-08-23 10:03                                   ` Evgeniy Polyakov
2006-08-23  7:35                               ` David Miller
2006-08-23  8:18                                 ` Nicholas Miell
2006-08-23  7:43                               ` Ian McDonald
2006-08-23  7:50                               ` Evgeniy Polyakov
2006-08-23 16:09                                 ` Andrew Morton
2006-08-23 16:22                                   ` Evgeniy Polyakov
2006-08-23  8:22                             ` Jari Sundell
2006-08-23  8:39                               ` Evgeniy Polyakov
2006-08-23  9:49                                 ` Jari Sundell
2006-08-23 10:20                                   ` Evgeniy Polyakov
2006-08-23 10:34                                     ` Jari Sundell
2006-08-23 10:51                                       ` Evgeniy Polyakov
2006-08-23 12:55                                         ` Jari Sundell
2006-08-23 13:11                                           ` Evgeniy Polyakov
2006-08-22 11:54   ` [PATCH] kevent_user: remove non-chardev interface Christoph Hellwig
2006-08-22 12:17     ` Evgeniy Polyakov
2006-08-22 12:27       ` Christoph Hellwig
2006-08-22 12:39         ` Evgeniy Polyakov
2006-08-22 11:55   ` [PATCH] kevent_user: use struct kevent_mring for the page ring Christoph Hellwig
2006-08-22 12:20     ` Evgeniy Polyakov
2006-08-23 11:24 ` [take13 0/3] kevent: Generic event handling mechanism Evgeniy Polyakov
2006-08-23 11:24   ` [take13 1/3] kevent: Core files Evgeniy Polyakov
2006-08-23 11:24     ` [take13 2/3] kevent: poll/select() notifications Evgeniy Polyakov
2006-08-23 11:24       ` [take13 3/3] kevent: Timer notifications Evgeniy Polyakov
2006-08-23 12:51     ` [take13 1/3] kevent: Core files Eric Dumazet
     [not found]       ` <20060823132753.GB29056@2ka.mipt.ru>
2006-08-23 13:44         ` Evgeniy Polyakov
2006-08-24 20:03     ` Christoph Hellwig
2006-08-25  5:48       ` Evgeniy Polyakov
2006-08-25  6:20         ` Andrew Morton
2006-08-25  6:32           ` Evgeniy Polyakov
2006-08-25  6:58             ` Andrew Morton
2006-08-25  7:20               ` Evgeniy Polyakov
2006-08-25  7:01           ` David Miller
2006-08-25  7:13             ` Andrew Morton
     [not found]   ` <Pine.LNX.4.63.0608231313370.8007@alpha.polcom.net>
     [not found]     ` <20060823122509.GA5744@2ka.mipt.ru>
     [not found]       ` <Pine.LNX.4.63.0608231437170.8007@alpha.polcom.net>
     [not found]         ` <20060823134227.GC29056@2ka.mipt.ru>
2006-08-23 18:56           ` [take13 0/3] kevent: Generic event handling mechanism Evgeniy Polyakov
2006-08-23 19:42             ` Evgeniy Polyakov
2006-08-25  9:54 ` [take14 " Evgeniy Polyakov
2006-08-25  9:54   ` [take14 1/3] kevent: Core files Evgeniy Polyakov
2006-08-25  9:54     ` [take14 2/3] kevent: poll/select() notifications Evgeniy Polyakov
2006-08-25  9:54       ` [take14 3/3] kevent: Timer notifications Evgeniy Polyakov
2006-08-27 21:03   ` [take14 0/3] kevent: Generic event handling mechanism Ulrich Drepper
2006-08-28  1:57     ` David Miller
2006-08-28  2:11       ` Ulrich Drepper
2006-08-28  2:40       ` Nicholas Miell
2006-08-28  2:59     ` Nicholas Miell
2006-08-28 11:47       ` Jari Sundell
2006-08-31  7:58     ` Evgeniy Polyakov
2006-09-09 16:10       ` Ulrich Drepper
2006-09-11  5:42         ` Evgeniy Polyakov
2006-09-04 10:14 ` [take15 0/4] " Evgeniy Polyakov
2006-09-04  9:58   ` Evgeniy Polyakov
2006-09-04 10:14   ` [take15 1/4] kevent: Core files Evgeniy Polyakov
2006-09-04 10:14     ` [take15 2/4] kevent: poll/select() notifications Evgeniy Polyakov
2006-09-04 10:14       ` [take15 3/4] kevent: Socket notifications Evgeniy Polyakov
2006-09-04 10:14         ` [take15 4/4] kevent: Timer notifications Evgeniy Polyakov
2006-09-05 13:39           ` Arnd Bergmann
2006-09-06  6:42             ` Evgeniy Polyakov
2006-09-05 13:28     ` [take15 1/4] kevent: Core files Arnd Bergmann
2006-09-06  6:51       ` Evgeniy Polyakov
2006-09-04 10:24   ` [take15 0/4] kevent: Generic event handling mechanism Evgeniy Polyakov
2006-09-06 11:55 ` [take16 " Evgeniy Polyakov
2006-09-06 11:55   ` [take16 1/4] kevent: Core files Evgeniy Polyakov
2006-09-06 11:55     ` [take16 2/4] kevent: poll/select() notifications Evgeniy Polyakov
2006-09-06 11:55       ` [take16 3/4] kevent: Socket notifications Evgeniy Polyakov
2006-09-06 11:55         ` [take16 4/4] kevent: Timer notifications Evgeniy Polyakov
2006-09-06 13:40     ` [take16 1/4] kevent: Core files Chase Venters
2006-09-06 13:54       ` Chase Venters
2006-09-06 14:03       ` Evgeniy Polyakov
2006-09-06 14:23         ` Chase Venters
2006-09-07  7:10           ` Evgeniy Polyakov
2006-08-23  4:35 [take12 0/3] kevent: Generic event handling mechanism Albert Cahalan

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=20060822162206.a766ec90.rdunlap@xenotime.net \
    --to=rdunlap@xenotime.net \
    --cc=akpm@osdl.org \
    --cc=davem@davemloft.net \
    --cc=drepper@redhat.com \
    --cc=hch@infradead.org \
    --cc=johnpol@2ka.mipt.ru \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=nmiell@comcast.net \
    --cc=zach.brown@oracle.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®