When communicating with an emulated device from a guest, we usually do MMIO or PIO accesses to program some operation and DMA and interrupts for the back channel.
DMA is fast, as QEMU has full accesses to our guest's memory. Interrupts have been accelerated before using the in-kernel interrupt controller. But how about port I/O? Is PIO fast when exiting to user space? Is MMIO fast when exiting to user space? How much performance do we lose by going through user space?
This talk will show performance numbers on the overhead that handling PIO/MMIO incurs on each read/write. It will also show methods on how to avoid having to exit to QEMU for all exits.