System-call offloading via Linux' io_uring on the Jailhouse partitioning hypervisor

io_uring is a recent development in the Linux kernel to perform asynchronous I/O operations. This means that the user space submits an IO request to the kernel, which performs that operation without blocking the user-space prorgram. While the operation (e.g., reading from disk) is performed, the user process can perform other calculations and gets informed when the I/O job has finished. io_uring implements this abstract model with two memory-mapped queues: the submission queue (SQ) and the completion queue (CQ). These queues can be operated without invoking system calls, whereby high-performance and distrubtion-free submission and completion of I/O jobs becomes possible.

On the other hand, we have the Jailhouse partioning hypervisor, which allows to split off indivdual processors from your Linux system as cells. Within these cells, which are physically separated from the rest of your system to reduce jitter and interference, you can run another operating system as a cell inmate. For example, you could run your own OOStuBS as an inmate in a Jailhouse cell. When creating a cell, it is possible to map special memory regions into the virtual memory of that cell.

The goal of this thesis is to support the io_uring in the Jailhouse hypervisor. The idea is to create the submission/completion queues within the Linux partion. As these queues are memory mapped, the hypervisor can make these queues visible to the cell, whereby they become accessible by the inmate. Furthermore, to make life a little easier for the inmate, a basic support library has to be developed.


Further Reading