Franz-Bernhard Tuneke, Christian Dietrich and Horst Schirmeier
Programmable Asynchronous I/O with io_uring and eBPF in Linux
Even before Meltdown and Spectre, the system-call–induced switching between user- and kernel mode caused non-negligible run-time overheads. Now that such hardware vulnerability require expensive countermeasures, the overheads weigh in even more – in extreme cases, system calls are slowed down by a factor of five. With a multi-call interface, several successive system calls can be submitted collectively, with a single mode change, to the kernel: Thereby, it is possible to significantly reduce the number of required mode changes, and consequently the total overhead.
In this talk, we analyze how well io_uring – the newly introduced asynchronous multi-call interface in Linux — is applicable to this problem. We identify shortcomings regarding the system-call pattern complexity that can be covered, and present an extension based on Linux’s eBPF virtual machine. Preliminary evaluation results from applying the approach to a high-performance key-value store show promising speedups, but also demonstrate the limitations of the current io_uring/eBPF implementation.