This is a pretty good article about CPU virtualization, which is a key starting point (as this seems to be the starting point of a series).
What I'm interested in at the moment is device virtualization, which seems like a pretty hairy problem in the current KVM paradigm. IOMMU is a big step but it seems there's just a lot of grunt work left for getting the host/guest drivers working well.
It almost feels like exokernel [0] path would have been preferable over having to write windows/linux/mac host drivers for virtualizing buses/devices. We already have a very awkward overlap with UEFI drivers. Maybe we just need new HW bus designs that are more of a switch than mux, I haven't gone deep enough into modern bus controller designs to know though.
The reality of doing this kind of research/work is a special hell though, because you sit in a crossfire between hardware/firmware/os/application vendors.
There are features that improve device virtualisation. Things like SR-IOV allowing for multiple virtual functions on a single device, and ATS which (among other things) means that device memory doesn’t need to be pinned. The issue is that these features are at best supported on expensive data centre devices.
This article seems to be targeting Windows. Does anyone know how different the process is on Linux? (Or if there are Linux-specific resources like this)
https://github.com/cloud-hypervisor/cloud-hypervisor isn't educational necessarily but is one of the most technically progressive fastest developing highest funded vm projects ever, and there are oodles of tech talks on it. I am not qualified to make any specific recommendations, but there's tons of stuff here.
What I'm interested in at the moment is device virtualization, which seems like a pretty hairy problem in the current KVM paradigm. IOMMU is a big step but it seems there's just a lot of grunt work left for getting the host/guest drivers working well.
It almost feels like exokernel [0] path would have been preferable over having to write windows/linux/mac host drivers for virtualizing buses/devices. We already have a very awkward overlap with UEFI drivers. Maybe we just need new HW bus designs that are more of a switch than mux, I haven't gone deep enough into modern bus controller designs to know though.
The reality of doing this kind of research/work is a special hell though, because you sit in a crossfire between hardware/firmware/os/application vendors.
[0]: https://wiki.osdev.org/Exokernel