From: Jeff Garzik <jeff@garzik.org>
To: Evgeniy Polyakov <johnpol@2ka.mipt.ru>
Cc: David Miller <davem@davemloft.net>,
Ulrich Drepper <drepper@redhat.com>,
Andrew Morton <akpm@osdl.org>, netdev <netdev@vger.kernel.org>,
linux-kernel@vger.kernel.org, Linus Torvalds <torvalds@osdl.org>
Subject: Re: [take21 0/4] kevent: Generic event handling mechanism.
Date: Tue, 07 Nov 2006 06:26:09 -0500 [thread overview]
Message-ID: <45506D51.30604@garzik.org> (raw)
In-Reply-To: <11619654014077@2ka.mipt.ru>
Evgeniy Polyakov wrote:
> Generic event handling mechanism.
>
> Consider for inclusion.
>
> Changes from 'take20' patchset:
> * new ring buffer implementation
> * removed artificial limit on possible number of kevents
> With this release and fixed userspace web server it was possible to
> achive 3960+ req/s with client connection rate of 4000 con/s
> over 100 Mbit lan, data IO over network was about 10582.7 KB/s, which
> is too close to wire speed if we get into account headers and the like.
OK, now that ring buffer is here, I definitely like the direction this
code is taking. I just committed the patches to a local repo for a good
in-depth review.
Could you write up a simple text file, documenting (a) your proposed
syscalls and (b) your ring buffer design?
Overall I have a Linux "design wish", that I hope kevent can fulfill:
To develop completely async applications (generally network servers, in
Linux-land) and increase the chance of zero-copy I/O, network and file
I/O submission and completion should be as async as possible.
As such, syscalls themselves have come a serializing bottleneck that
isn't strictly necessary. A fully-async application should be able to
submit file read, file write, and network write requests
asynchronously... in batches. Network reads, and file I/O completions
should be received asynchronously, potentially in batches.
Even with epoll and AIO syscalls, Linux isn't quite up to the task.
So to me, the design of the userspace interface that solves this problem
is a fundamental issue.
My best guess at a solution would be two classes of mmap'd ring buffers,
request and response. Let the app allocate one or more. Then have two
hooks, (a) kick the kernel to read the request ring, and (b) kick the
app when one or more events have arrived on a ring.
But that's just thinking out loud. I welcome any solution that gives
userspace a fully-async submission/completion interface for both network
and file I/O.
Setting the standard for a good interface here means Linux will kick ass
for decades more to come ;-) This is IMO a Big Deal(tm).
Jeff
next prev parent reply other threads:[~2006-11-07 11:26 UTC|newest]
Thread overview: 200+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1154985aa0591036@2ka.mipt.ru>
2006-10-27 16:10 ` [take21 0/4] kevent: Generic event handling mechanism Evgeniy Polyakov
2006-10-27 16:10 ` [take21 1/4] kevent: Core files Evgeniy Polyakov
2006-10-27 16:10 ` [take21 2/4] kevent: poll/select() notifications Evgeniy Polyakov
2006-10-27 16:10 ` [take21 3/4] kevent: Socket notifications Evgeniy Polyakov
2006-10-27 16:10 ` [take21 4/4] kevent: Timer notifications Evgeniy Polyakov
2006-10-28 10:04 ` [take21 2/4] kevent: poll/select() notifications Eric Dumazet
2006-10-28 10:08 ` Evgeniy Polyakov
2006-10-28 10:28 ` [take21 1/4] kevent: Core files Eric Dumazet
2006-10-28 10:53 ` Evgeniy Polyakov
2006-10-28 12:36 ` Eric Dumazet
2006-10-28 13:03 ` Evgeniy Polyakov
2006-10-28 13:23 ` Eric Dumazet
2006-10-28 13:28 ` Evgeniy Polyakov
2006-10-28 13:34 ` Eric Dumazet
2006-10-28 13:47 ` Evgeniy Polyakov
2006-10-27 16:42 ` [take21 0/4] kevent: Generic event handling mechanism Evgeniy Polyakov
2006-11-07 11:26 ` Jeff Garzik [this message]
2006-11-07 11:46 ` Jeff Garzik
2006-11-07 11:58 ` Evgeniy Polyakov
2006-11-07 11:51 ` Evgeniy Polyakov
2006-11-07 12:17 ` Jeff Garzik
2006-11-07 12:29 ` Evgeniy Polyakov
2006-11-07 12:32 ` Jeff Garzik
2006-11-07 19:34 ` Andrew Morton
2006-11-07 20:52 ` David Miller
2006-11-07 21:38 ` Andrew Morton
2006-11-01 11:36 ` [take22 " Evgeniy Polyakov
2006-11-01 11:36 ` [take22 1/4] kevent: Core files Evgeniy Polyakov
2006-11-01 11:36 ` [take22 2/4] kevent: poll/select() notifications Evgeniy Polyakov
2006-11-01 11:36 ` [take22 3/4] kevent: Socket notifications Evgeniy Polyakov
2006-11-01 11:36 ` [take22 4/4] kevent: Timer notifications Evgeniy Polyakov
2006-11-01 13:06 ` [take22 0/4] kevent: Generic event handling mechanism Pavel Machek
2006-11-01 13:25 ` Evgeniy Polyakov
2006-11-01 16:05 ` Pavel Machek
2006-11-01 16:24 ` Evgeniy Polyakov
2006-11-01 18:13 ` Oleg Verych
2006-11-01 18:57 ` Evgeniy Polyakov
2006-11-02 2:12 ` Nate Diller
2006-11-02 6:21 ` Evgeniy Polyakov
2006-11-02 19:40 ` Nate Diller
2006-11-03 8:42 ` Evgeniy Polyakov
2006-11-03 8:57 ` Pavel Machek
2006-11-03 9:04 ` David Miller
2006-11-07 12:05 ` Jeff Garzik
2006-11-03 9:13 ` Evgeniy Polyakov
2006-11-05 11:19 ` Pavel Machek
2006-11-05 11:43 ` Evgeniy Polyakov
[not found] ` <aaf959cb0611011829k36deda6ahe61bcb9bf8e612e1@mail.gmail.com>
[not found] ` <aaf959cb0611011830j1ca3e469tc4a6af3a2a010fa@mail.gmail.com>
[not found] ` <4549A261.9010007@cosmosbay.com>
2006-11-03 2:42 ` zhou drangon
2006-11-03 9:16 ` Evgeniy Polyakov
2006-11-07 12:02 ` Jeff Garzik
2006-11-03 18:49 ` Oleg Verych
2006-11-04 10:24 ` Evgeniy Polyakov
2006-11-04 17:47 ` Evgeniy Polyakov
2006-11-01 16:07 ` James Morris
2006-11-07 16:50 ` [take23 0/5] " Evgeniy Polyakov
2006-11-07 16:50 ` [take23 1/5] kevent: Description Evgeniy Polyakov
2006-11-07 16:50 ` [take23 2/5] kevent: Core files Evgeniy Polyakov
2006-11-07 16:50 ` [take23 3/5] kevent: poll/select() notifications Evgeniy Polyakov
2006-11-07 16:50 ` [take23 4/5] kevent: Socket notifications Evgeniy Polyakov
2006-11-07 16:50 ` [take23 5/5] kevent: Timer notifications Evgeniy Polyakov
2006-11-07 22:53 ` [take23 3/5] kevent: poll/select() notifications Davide Libenzi
2006-11-08 8:45 ` Evgeniy Polyakov
2006-11-08 17:03 ` Evgeniy Polyakov
2006-11-07 22:16 ` [take23 2/5] kevent: Core files Andrew Morton
2006-11-08 8:24 ` Evgeniy Polyakov
2006-11-07 22:16 ` [take23 1/5] kevent: Description Andrew Morton
2006-11-08 8:23 ` Evgeniy Polyakov
2006-11-07 22:17 ` [take23 0/5] kevent: Generic event handling mechanism Andrew Morton
2006-11-08 8:21 ` Evgeniy Polyakov
2006-11-08 14:51 ` Eric Dumazet
2006-11-08 22:03 ` Andrew Morton
2006-11-08 22:44 ` Davide Libenzi
2006-11-08 23:07 ` Eric Dumazet
2006-11-08 23:56 ` Davide Libenzi
2006-11-09 7:24 ` Eric Dumazet
2006-11-09 7:52 ` Eric Dumazet
2006-11-09 17:12 ` Davide Libenzi
2006-11-09 8:23 ` [take24 0/6] " Evgeniy Polyakov
2006-11-09 8:23 ` [take24 1/6] kevent: Description Evgeniy Polyakov
2006-11-09 8:23 ` [take24 2/6] kevent: Core files Evgeniy Polyakov
2006-11-09 8:23 ` [take24 3/6] kevent: poll/select() notifications Evgeniy Polyakov
2006-11-09 8:23 ` [take24 4/6] kevent: Socket notifications Evgeniy Polyakov
2006-11-09 8:23 ` [take24 5/6] kevent: Timer notifications Evgeniy Polyakov
2006-11-09 8:23 ` [take24 6/6] kevent: Pipe notifications Evgeniy Polyakov
2006-11-09 9:08 ` [take24 3/6] kevent: poll/select() notifications Eric Dumazet
2006-11-09 9:29 ` Evgeniy Polyakov
2006-11-09 18:51 ` Davide Libenzi
2006-11-09 19:10 ` Evgeniy Polyakov
2006-11-09 19:42 ` Davide Libenzi
2006-11-09 20:10 ` Davide Libenzi
2006-11-11 17:36 ` [take24 7/6] kevent: signal notifications Evgeniy Polyakov
2006-11-11 22:28 ` [take24 0/6] kevent: Generic event handling mechanism Ulrich Drepper
2006-11-13 10:54 ` Evgeniy Polyakov
2006-11-13 11:16 ` Evgeniy Polyakov
2006-11-20 0:02 ` Ulrich Drepper
2006-11-20 8:25 ` Evgeniy Polyakov
2006-11-20 8:43 ` Andrew Morton
2006-11-20 8:51 ` Evgeniy Polyakov
2006-11-20 9:15 ` Andrew Morton
2006-11-20 9:19 ` Evgeniy Polyakov
2006-11-20 20:29 ` Ulrich Drepper
2006-11-20 21:46 ` Jeff Garzik
2006-11-20 21:52 ` Ulrich Drepper
2006-11-21 9:09 ` Ingo Oeser
2006-11-22 11:38 ` Michael Tokarev
2006-11-22 11:47 ` Evgeniy Polyakov
2006-11-22 12:33 ` Jeff Garzik
2006-11-21 9:53 ` Evgeniy Polyakov
2006-11-21 16:58 ` Ulrich Drepper
2006-11-21 17:43 ` Evgeniy Polyakov
2006-11-21 18:46 ` Evgeniy Polyakov
2006-11-21 20:01 ` Jeff Garzik
2006-11-22 10:41 ` Evgeniy Polyakov
2006-11-21 20:19 ` Jeff Garzik
2006-11-22 10:39 ` Evgeniy Polyakov
2006-11-22 7:38 ` Ulrich Drepper
2006-11-22 10:44 ` Evgeniy Polyakov
2006-11-22 21:02 ` Ulrich Drepper
2006-11-23 12:23 ` Evgeniy Polyakov
2006-11-23 8:52 ` Kevent POSIX timers support Evgeniy Polyakov
2006-11-23 20:26 ` Ulrich Drepper
2006-11-24 9:50 ` Evgeniy Polyakov
2006-11-27 18:20 ` Ulrich Drepper
2006-11-27 18:24 ` David Miller
2006-11-27 18:36 ` Ulrich Drepper
2006-11-27 18:49 ` David Miller
2006-11-28 9:16 ` Evgeniy Polyakov
2006-11-28 19:13 ` David Miller
2006-11-28 19:22 ` Evgeniy Polyakov
2006-12-12 1:36 ` David Miller
2006-12-12 5:31 ` Evgeniy Polyakov
2006-11-28 9:16 ` Evgeniy Polyakov
2006-11-22 7:33 ` [take24 0/6] kevent: Generic event handling mechanism Ulrich Drepper
2006-11-22 10:38 ` Evgeniy Polyakov
2006-11-22 22:22 ` Ulrich Drepper
2006-11-23 12:18 ` Evgeniy Polyakov
2006-11-23 22:23 ` Ulrich Drepper
2006-11-24 10:57 ` Evgeniy Polyakov
2006-11-27 19:12 ` Ulrich Drepper
2006-11-28 11:00 ` Evgeniy Polyakov
2006-11-22 12:09 ` Evgeniy Polyakov
2006-11-22 12:15 ` Evgeniy Polyakov
2006-11-22 13:46 ` Evgeniy Polyakov
2006-11-22 22:24 ` Ulrich Drepper
2006-11-23 12:22 ` Evgeniy Polyakov
2006-11-23 20:34 ` Ulrich Drepper
2006-11-24 10:58 ` Evgeniy Polyakov
2006-11-27 18:23 ` Ulrich Drepper
2006-11-28 10:13 ` Evgeniy Polyakov
2006-12-27 20:45 ` Ulrich Drepper
2006-12-28 9:50 ` Evgeniy Polyakov
2006-11-21 16:29 ` [take25 " Evgeniy Polyakov
2006-11-21 16:29 ` [take25 1/6] kevent: Description Evgeniy Polyakov
2006-11-21 16:29 ` [take25 2/6] kevent: Core files Evgeniy Polyakov
2006-11-21 16:29 ` [take25 3/6] kevent: poll/select() notifications Evgeniy Polyakov
2006-11-21 16:29 ` [take25 4/6] kevent: Socket notifications Evgeniy Polyakov
2006-11-21 16:29 ` [take25 5/6] kevent: Timer notifications Evgeniy Polyakov
2006-11-21 16:29 ` [take25 6/6] kevent: Pipe notifications Evgeniy Polyakov
2006-11-22 11:20 ` Eric Dumazet
2006-11-22 11:30 ` Evgeniy Polyakov
2006-11-22 23:46 ` [take25 1/6] kevent: Description Ulrich Drepper
2006-11-23 11:52 ` Evgeniy Polyakov
2006-11-23 19:45 ` Ulrich Drepper
2006-11-24 11:01 ` Evgeniy Polyakov
2006-11-24 16:06 ` Ulrich Drepper
2006-11-24 16:14 ` Evgeniy Polyakov
2006-11-24 16:31 ` Evgeniy Polyakov
2006-11-27 19:20 ` Ulrich Drepper
2006-11-22 23:52 ` Ulrich Drepper
2006-11-23 11:55 ` Evgeniy Polyakov
2006-11-23 20:00 ` Ulrich Drepper
2006-11-23 21:49 ` Hans Henrik Happe
2006-11-23 22:34 ` Ulrich Drepper
2006-11-24 11:50 ` Evgeniy Polyakov
2006-11-24 16:17 ` Ulrich Drepper
2006-11-24 11:46 ` Evgeniy Polyakov
2006-11-24 16:30 ` Ulrich Drepper
2006-11-24 16:49 ` Evgeniy Polyakov
2006-11-27 19:23 ` Ulrich Drepper
2006-11-23 22:33 ` Ulrich Drepper
2006-11-23 22:48 ` Jeff Garzik
2006-11-23 23:45 ` Ulrich Drepper
2006-11-24 0:48 ` Eric Dumazet
2006-11-24 8:14 ` Andrew Morton
2006-11-24 8:33 ` Eric Dumazet
2006-11-24 15:26 ` Ulrich Drepper
2006-11-24 0:14 ` Hans Henrik Happe
2006-11-24 12:05 ` Evgeniy Polyakov
2006-11-24 12:13 ` Evgeniy Polyakov
2006-11-27 19:43 ` Ulrich Drepper
2006-11-28 10:26 ` Evgeniy Polyakov
2006-11-30 19:14 ` [take26 0/8] kevent: Generic event handling mechanism Evgeniy Polyakov
2006-11-30 19:14 ` [take26 1/8] kevent: Description Evgeniy Polyakov
2006-11-30 19:14 ` [take26 2/8] kevent: Core files Evgeniy Polyakov
2006-11-30 19:14 ` [take26 3/8] kevent: poll/select() notifications Evgeniy Polyakov
2006-11-30 19:14 ` [take26 4/8] kevent: Socket notifications Evgeniy Polyakov
2006-11-30 19:14 ` [take26 5/8] kevent: Timer notifications Evgeniy Polyakov
2006-11-30 19:14 ` [take26 6/8] kevent: Pipe notifications Evgeniy Polyakov
2006-11-30 19:14 ` [take26 7/8] kevent: Signal notifications Evgeniy Polyakov
2006-11-30 19:14 ` [take26 8/8] kevent: Kevent posix timer notifications Evgeniy Polyakov
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=45506D51.30604@garzik.org \
--to=jeff@garzik.org \
--cc=akpm@osdl.org \
--cc=davem@davemloft.net \
--cc=drepper@redhat.com \
--cc=johnpol@2ka.mipt.ru \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=torvalds@osdl.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;
as well as URLs for NNTP newsgroup(s).