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.