Re: async network I/O, event channels, etc

David Miller
2006-07-27T06:10:37Z

From: Evgeniy Polyakov <johnpol@2ka.mipt.ru>
Date: Wed, 26 Jul 2006 10:28:17 +0400

> I have not created additional DMA memory allocation methods, like
> Ulrich described in his article, so I handle it inside NAIO which
> has some overhead (I posted get_user_pages() sclability graph some
> time ago).

I've been thinking about this aspect, and I think it's very
interesting. Let's be clear what the ramifications of this
are first.

Using the terminology of Network Algorithmics, this is an
instance of Principle 2, "Shift computation in time".

Instead of using get_user_pages() at AIO setup, we instead map the
thing to userspace later when the user wants it. Pinning pages is a
pain because both user and kernel refer to the buffer at the same
time. We get more flexibility when the user has to map the thing
explicitly.

I want us to think about how a user might want to use this. What
I anticipate is that users will want to organize a pool of AIO
buffers for themselves using this DMA interface. So the events
they are truly interested in are of a finer granularity than you
might expect. They want to know when pieces of a buffer are
available for reuse.

And here is the core dilemma.

If you make the event granularity too coarse, a larger AIO buffer
pool is necessary. If you make the event granuliary too fine,
event processing begins to dominate, and costs too much. This is
true even for something as light weight as kevent.