event rings are just pure data structures that describe a set of data,
and they have advantages and disadvantages. For the record, we've
already got direct experience with rings as software APIs: they were
used for KAIO and they were an implementational and maintainance
nightmare and nobody used them. Kevent might be better, but you make it
sound as if it was a trivial design choice while it certainly isnt!
Sure, for hardware interfaces like networking cards tx and rx rings are
the best thing but that is apples to oranges: hardware itself is about
_limited_ physical resources, matching a _limited_ data structure like a
ring quite well. But for software APIs, the built-in limit of rings
makes it a baroque data structure that has a fair share disadvantages in
addition to its obvious advantages.
epoll is very much is capable of doing it - but why bother if something
more flexible than a ring can be used and the performance difference is
negligible? (Read my other reply in this thread for further points.)
but, for the record, syslets very much use a completion ring, so i'm not
fundamentally opposed to the idea. I just think it's seriously
over-hyped, just like most other bits of the kevent approach. (Nor do we
have to attach this to syslets and threadlets - kevents are an
orthogonal approach not directly related to asynchronous syscalls -
syslets/threadlets can make use of epoll just as much as they can make
use of kevent APIs.)
Ingo
-