Re: [patch 00/13] Syslets, "Threadlets", generic AIO support, v3

Evgeniy Polyakov
2007-02-26T16:58:15Z

On Mon, Feb 26, 2007 at 03:15:18PM +0100, Ingo Molnar (mingo@elte.hu) wrote:
> > > your whole reasoning seems to be faith-based:
> > >
> > > [...] Anyway, kevents are very small, threads are very big, [...]
> > >
> > > How about following the scientific method instead?
> >
> > That are only rethorical words as you have understood I bet, I meant
> > that the whole process of getting readiness notification from kevent
> > is way tooo much faster than resheduling of the new process/thread to
> > handle that IO.
> >
> > The whole process of switching from one process to another can be as
> > fast as bloody hell, but all other details just kill the thing.
>
> for our primary abstractions there /IS NO OTHER DETAIL/ but wakeup and
> context-switching! The "event notification" of a sys_read() /IS/ the
> wakeup and context-switching that we do - or the epoll/kevent enqueueing
> as an alternative.
>
> yes, the two are still different in a number of ways, and yes, it's
> still stupid to do a pool of thousands of threads and thus we can always
> optimize queuing, RAM and cache footprint via specialization, but your
> whole foundation seems to be constructed around the false notion that
> queueing and scheduling a task by the scheduler is somehow magically
> expensive and different from queueing and scheduling other type of
> requests. Please reconsider that foundation and open up a bit more to a
> slightly different world view: scheduling is really just another, more
> generic (and thus certainly more expensive) type of 'request queueing',
> and user-space, most of the time, is much better off if it handles its
> 'requests' and 'events' via tasks. (Especially if many of those 'events'
> turn out to be non-events at all, so to speak.)

If kernelspace rescheduling is that fast, then please explain me why
userspace one always beats kernel/userspace?

And you showed that threadlets without polling accept still does not
scale good - if it is the same fast queueing of events, then why doesn't
it work?

Actually it does not matter, if that narrow place exist (like
kernel/user transformation, or register copy or something else), it can
be eliminated in different model - kevent is that model - it does not
require a lot of things to be changed to get notification and start
working, so it scales better.

It is very similar to epoll, but there are at least two significant
moments:
1. it can work with _any_ type of events with minimal overhead (can not
be even remotely compared with 'file' binding which is required to be
pollable).
2. its notifications do not go through the second loop, i.e. it is O(1),
not O(ready_num), and notifications happens directly from internals of
the appropriate subsystem, which does not require special wakeup
(although it can be done too).

> Ingo

--
Evgeniy Polyakov