Post Syndicated from daroc original https://lwn.net/Articles/1062286/
The kernel’s asynchronous
io_uring interface maintains two shared ring buffers:
a submission queue for sending requests to the kernel, and a completion queue
containing the results of those requests. Even with shared memory removing much
of the overhead of communicating with user space, there is still some overhead
whenever the kernel must switch to user space to give it the opportunity to
process completion requests and
queue up any subsequent work items. A
patch set from Pavel Begunkov minimizes this overhead by letting
programmers extend the io_uring event loop with a BPF program that can enqueue
additional work in response to completion events. The patch set has
been in development for a long time, but has
finally been accepted.