mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Jonathan Lemon <jlemon@flugsvamp.com>
To: Davide Libenzi <davidel@xmailserver.org>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [patch, rfc] lt-epoll ( level triggered epoll ) ...
Date: Fri, 14 Mar 2003 17:36:44 -0600	[thread overview]
Message-ID: <20030314173644.A77778@flugsvamp.com> (raw)
In-Reply-To: <Pine.LNX.4.50.0303141444350.1903-100000@blue1.dev.mcafeelabs.com>; from davidel@xmailserver.org on Fri, Mar 14, 2003 at 02:57:51PM -0800

On Fri, Mar 14, 2003 at 02:57:51PM -0800, Davide Libenzi wrote:
> On Fri, 14 Mar 2003, Jonathan Lemon wrote:
> 
> > > > >> So, result of this whole epoll work is trivially predictable - Linux will have
> > > > >> analog of "overbloated" and "poorly designed" kqueue, but more poor
> > > > >> and with incompatible interface, adding its own stone to hell of
> > > > >> different APIs. Congratulations.
> > > > >
> > > > >See, this is a free world, and I very much respect your opinion. On the
> > > > >other side you might want to actually *read* the kqueue man page and find
> > > > >out of its 24590 flags, where 99% of its users will use only 1% of its
> > > > >functionality. Talking about overbloating. You might also want to know
> > > > >that quite a few kqueue users currently running on your favourite OS, are
> > > > >moving to Linux+epoll. The reason is still unclear to me, but I can leave
> > > > >you to discover it as exercise.
> > > >
> > > > FUD. You should know that in the normal case, kq users don't use any
> > > > flags, but they are available for those people who are doing specific
> > > > things.  But I bet you knew that already and just want to slam something
> > > > that isn't epoll.
> > >
> > > Please, consider reading the message that generated the response before
> > > generating superfluous noise. Expecially those "overbloated" and "poorly
> > > designed" thingies. In my books overbloat is the presence of features that
> > > 99% of users simply ignore.
> >
> > I've read the entire thread.
> >
> > I'm responding to your hyperbole about "XXX flags", which is pure
> > exaggeration.  I might as well say that epoll is "limited" and
> > "single-purpose", since it is not capable of doing the same things
> > that kqueue can do.  In my book, engineering should make the common
> > case fast, and the uncommon case possible.  You seem to be ignoring
> > the latter.
> >
> > If you want to call those features you don't use, "bloat", fine.  But
> > they *are* useful to many (>> 1) people, and they were added because
> > there was no other way to solve their problem.  You should see the
> > laundry list of items/features/extensions/flags I declined to add, usually
> > because they were too special-purpose.
> 
> Let's start again. We were talking about APIs and there was a guy that
> wrote that kqueue is better than epoll. I then replied that API are a
> matter of personal opinions and that I prefer epoll, with other guys
> pretty much following this taste. What I don't like of kqueue is 1)
> multiplexing of a single funtion doing 23 different tasks 2) has many
> options that A) increase code size B) are used by 2% of its users. This
> was inserted in the context where I explicitly said that API are a matter
> of personal taste. Then a guy came out with "overbloated" and "poorly
> designed", and I replied to him. And no, you don't need 47 flags/options
> to do things that people di for ages using poll(2). You're pushing code
> inside the kernel when *many* of those things can be done in user space.
> Why should the 98% of users using the bare minimum API to pay the price of
> those extra features ? Let me guess you're going to say that those extra
> features have no cost ... yeah right.

Yes, an API is a matter of personal taste, and I don't particularly like
epoll, but that isn't really relevant.  What you seem to not understand 
is that kqueue is an event framework into which you plug different filters,
which have different capabilities.  You may not like this "multiplexing",
but that's part of the key to how kqueue works, and is THE reason it is not
just "Yet Another Notification Mechanism".

kqueue does not limit itself to the poll() interface, and hence can do 
things that are simply not possible with poll.  If you're just thinking
of epoll as a "faster poll", fine, but that's not what kqueue is, and 
viewed from that context, yes, some things may appear as "bloat".

If you think that kqueue filters can be done in user space, I don't believe
you undersand the problem.  Show me a single thing that an existing filter
does that you can do efficiently in userspace.

Kqueue itself (the core code) has only 6 user-settable flags:

    - add/delete,
    - enable/disable (these are optimizations)
    - oneshot/clear  (your new "tristate" flags).

Other than 'enable/disable', epoll is going to have to support these
in one form or another. Everything else is per-filter, and yes, if a
filter is not being used, there is *zero* cost, other than being linked
into the kernel.  And yes, before you ask, I support dynamically loaded
filters, which futher extend kqueue's capabilities.

E.g.: do you want to perform multiple accept()s on a listening socket,
register the descriptors with kqueue, then return all of the new fd's
to userspace, all in one system call?  Trivial, and actually being used
in a commercial product.  Yes, *this* functionality can be done in userspace,
but at the cost of multiple system calls; which is one reason why it is
not part of a stock FreeBSD system.

So, where's the bloat?  The "bloat" apparently comes from the fact
that kqueue is able to do much more than just "POLLIN|POLLOUT".

I don't intend to get into a long argument with you.  It's clear to me 
that epoll is designed to only solve a limited subset of problems that
kqueue does, which is fine.  However, I do object when you say that kqueue
is has "too many flags", or is "bloated".  That's like saying that the 
linux kernel is bloated because it supports XXX different sound modules;
not all users will use all modules nor all features of a single module.
-- 
Jonathan

  reply	other threads:[~2003-03-14 23:26 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <local.mail.linux-kernel/Pine.LNX.4.50.0303101139520.1922-100000@blue1.dev.mcafeelabs.com>
     [not found] ` <local.mail.linux-kernel/20030311142447.GA14931@bjl1.jlokier.co.uk.lucky.linux.kernel>
     [not found]   ` <local.mail.linux-kernel/20030314155947.GD13106@netch.kiev.ua>
2003-03-14 21:43     ` [patch, rfc] lt-epoll ( level triggered epoll ) ... X-Newsgroups: local.mail.linux-kernel In-Reply-To: <local.mail.linux-kernel/Pine.LNX.4.50.0303140845480.1903-100000@blue1.dev.mcafeelabs.com> Jonathan Lemon
2003-03-14 22:16       ` [patch, rfc] lt-epoll ( level triggered epoll ) Davide Libenzi
2003-03-14 22:27         ` Jonathan Lemon
2003-03-14 22:57           ` Davide Libenzi
2003-03-14 23:36             ` Jonathan Lemon [this message]
2003-03-15  0:06               ` Davide Libenzi
2003-03-10 20:15 Davide Libenzi
2003-03-11  4:32 ` Niels Provos
2003-03-11 18:15   ` Davide Libenzi
2003-03-11 20:04     ` Niels Provos
2003-03-12 18:05   ` Martin Waitz
2003-03-12 18:36     ` Davide Libenzi
2003-03-11  9:34 ` bert hubert
2003-03-11 18:20   ` Davide Libenzi
2003-03-12 12:05     ` bert hubert
2003-03-12 17:17       ` Davide Libenzi
2003-03-11 14:24 ` Jamie Lokier
2003-03-11 18:27   ` Davide Libenzi
2003-03-11 16:10 ` Giuliano Pochini
2003-03-11 18:34   ` Davide Libenzi
2003-03-12 18:08   ` Martin Waitz
2003-03-12 18:30     ` Davide Libenzi
2003-03-12 19:21       ` Martin Waitz
2003-03-12 19:39         ` Davide Libenzi
2003-03-12 19:57           ` Martin Waitz
     [not found] ` <20030311142447.GA14931@bjl1.jlokier.co.uk.lucky.linux.kernel>
2003-03-14 15:59   ` Valentin Nechayev
2003-03-14 16:53     ` Davide Libenzi
2003-03-14 17:56       ` Tim Smith
2003-03-14 19:01         ` 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=20030314173644.A77778@flugsvamp.com \
    --to=jlemon@flugsvamp.com \
    --cc=davidel@xmailserver.org \
    --cc=linux-kernel@vger.kernel.org \
    /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®