I'm pleased to announce in linux-kernel@ mail list kevent subsystem which incorporates several AIO/kqueue design notes and ideas. Kevent can be used both for edge and level notifications. It supports socket notifications, network AIO (aio_send(), aio_recv() and aio_sendfile()), inode notifications (create/remove), generic poll()/select() notifications and timer notifications.
Short implementation details. storage - each source of events (socket, inode, timer, aio) has structure kevent_storage incorporated into it, which is basically a list of registered interests for this source of events. user - it is abstraction which holds all requested kevents. It is similar to FreeBSD's kqueue.
kevent - set of interests for given source of events or storage.
Each kevent now is queued into three lists:
* kevent_user->kevent_list - list of all registered kevents. * kevent_user->ready_list - list of ready kevents. * kevent_storage->list - list of all interests for given kevent_storage.
When kevent is queued into storage, it will live there until removed by kevent_dequeue(). When some activity is noticed in given storage, it scans it's kevent_storage->list for kevents which match activity event. If kevents are found and they are not already in the kevent_user->ready_list, they will be added there at the end.
It is possible wait until either requested number of kevents are ready or timeout elapsed or at least one kevent is ready, it's behaviour depends on parameters.
Any event can be added/removed/modified by ioctl or one control syscall.
It was tested against FreeBSD kqueue and Linux epoll and showed very noticeble performance win.
Network asynchronous IO operations were tested against Linux synchronous socket code and showed noticeble performance win.
I would like to hear some comments about the overall design, implementation and plans about it's usefullness for generic kernel. Kevent patches were discussed several times already (project was created quite long time ago), and there were present no major negative feedback except some high-level API changes. The latest discussion can be found at [4].
Design notes, patches, userspace application and perfomance tests can be found at project's homepages.
-- Evgeniy Polyakov - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at vger.kernel.org/majordomo-info.html Please read the FAQ at www.tux.org/lkml/