Designing a Userspace Disk I/O Scheduler for Modern Datastores (2016)
scylladb.com
scylladb.com
Just yesterday we have finished a redesign of this addressing some room-for-improvement areas that we saw after those two years.
And I was about to start writing an article about it right now! Link soon =)
Then I could install another OS as a VM (e.g. macOS) and use SR-IOV to give it all my other hardware—but, rather than relying on my "shell OS" actually having good semantics for things like software RAID, logical volume management or thin provisioning—or, indeed, good disk I/O scheduling—I could just set up those abstractions on Linux, and rely on the Linux kernel's I/O scheduler (which I could patch to be anything I wanted, like, for example, the above) and then share out the result as a plain block device for my "shell OS" to consume using an iSCSI driver.
I suppose the same would be true for the network as well—the Linux VM could act as a local packet filter and expose services like a caching DNS resolver for the "shell OS" to consume.
I mean, this kind of stuff is really obvious when you've got more than one computer (I'm just talking about a SAN and a backplane router); it's just the fact that you can do it all on one modern computer, with near-zero overhead, that's interesting.
SR-IOV is the name for the PCI SIG's standardization of the control protocol between the CPU and the IOMMU in respect to controlling PCIe devices. Even if you're just mapping a device to a single VM, if it's a PCIe device, you're using SR-IOV to do it. (The ability to do this might still be referred to as VT-d in Intel-platform BIOSes, but if you look in your OS device tree, the functionality enabled with an "Enable Intel VT-d" setting should appear as an SR-IOV controller. You could think of VT-d as the part in the CPU that speaks the SR-IOV protocol to the IOMMU.)