From: Evgeniy Polyakov <johnpol@2ka.mipt.ru>
To: Jari Sundell <sundell.software@gmail.com>
Cc: Nicholas Miell <nmiell@comcast.net>,
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 23:47:06 +0400 [thread overview]
Message-ID: <20060822194706.GA3476@2ka.mipt.ru> (raw)
In-Reply-To: <b3f268590608221214l45bb6ad6meccfba99b89710a0@mail.gmail.com>
On Tue, Aug 22, 2006 at 09:14:30PM +0200, Jari Sundell (sundell.software@gmail.com) wrote:
> Changing kevents are done with a separate system call from polling
> afaics, thus every change requires a context switch. This in contrast
> to BSD's kqueue which allows user-space to pass the changes when
> kevent (polling) is called.
>
> It may also choose to update the filters immediately with the same call.
Word "polling" really confuses me here, but now I understand you.
Such approach actually has unresolved issues - consider for
example a situation when all provided events are ready immediately - what
should be returned (as far as I recall they are always added into kqueue in
BSDs before started to be checked, so old events will be returned
first)? And currently ready events can be read through mapped buffer
without any syscall at all.
And Linux syscall is much cheaper than BSD's one.
Consider (especially apped buffer) that issues, it really does not cost
interface complexity.
> >> Maybe this is a topic that will singe my fur, but what is wrong with the
> >> kqueue API? Will I really have to implement support for yet another event
> >> API in my program.
> >
> >Why did I not implemented it like Solaris did?
> >Or FreeBSD did?
> >It was designed with features mention on AIO homepage in mind, but not
> >to be compatible with some other implementation.
> >And why should it be?
>
> If it can be, why should it not be? At least, if you reinvent the
> wheel its advantages should be obvious.
>
> Considering that kqueue is available on more popular OSes like darwin
> it would ease portability greatly if there was a shared event API.
> That is, unless you think there's something fundamentally wrong with
> their design.
First of all, there are completely different types.
Design of the in-kernel part is very different too.
> Your interface:
>
> +asmlinkage long sys_kevent_get_events(int ctl_fd, unsigned int min,
> unsigned int max,
> + unsigned int timeout, void __user *buf, unsigned flags);
> +asmlinkage long sys_kevent_ctl(int ctl_fd, unsigned int cmd, unsigned
> int num, void __user *buf);
>
> BSD's kqueue:
>
> struct kevent {
> uintptr_t ident; /* identifier for this event */
> short filter; /* filter for event */
> u_short flags; /* action flags for kqueue */
> u_int fflags; /* filter flag value */
> intptr_t data; /* filter data value */
> void *udata; /* opaque user data identifier */
> };
>From your description there is a serious problem with arches which
supports different width of the pointer. I do not have sources of ny BSD
right now, but if it is really like you've described, it can not be used
in Linux at all.
> int kevent(int kq, const struct kevent *changelist, int nchanges,
> struct kevent *eventlist, int nevents, const struct timespec
> *timeout);
>
> The only thing missing in BSD's kevent is the min/max parameters, the
> various filters in kevent_get_events either have equivalent filters or
> could be added as extensions. (I didn't look too carefully through
> them)
>
> On the other hand, your API lacks the ability to pass changes when
> polling, as mentioned above. It would be preferable if the timeout
> parameter was either timespec or timeval.
No way - timespec uses long.
> Rakshasa
--
Evgeniy Polyakov
next prev parent reply other threads:[~2006-08-22 19:48 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 0/3] kevent: Generic event handling mechanism 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 ` [take12 0/3] kevent: Generic event handling mechanism Randy.Dunlap
[not found] ` <b3f268590608220957g43a16d6bmde8a542f8ad8710b@mail.gmail.com>
2006-08-22 17:09 ` Jari Sundell
2006-08-22 18:01 ` Evgeniy Polyakov
2006-08-22 19:14 ` Jari Sundell
2006-08-22 19:47 ` Evgeniy Polyakov [this message]
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=20060822194706.GA3476@2ka.mipt.ru \
--to=johnpol@2ka.mipt.ru \
--cc=akpm@osdl.org \
--cc=davem@davemloft.net \
--cc=drepper@redhat.com \
--cc=hch@infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=nmiell@comcast.net \
--cc=sundell.software@gmail.com \
--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;
as well as URLs for NNTP newsgroup(s).