Everyone Virtualizes Everything But Time

Imagine a virtualized execution environment (VEE) that virtualizes not only the host system it runs on, even not only other systems slower than the host system, but also maintains and adjusts the exact speed at which these systems operate, in strong temporal isolation from each other, when they execute code, process I/O, and manage memory. This is what we argue for and are trying to build. Just maintaining the exact speed at which virtualized systems operate is already a challenge but may result in an even higher proliferation of virtualization technology significantly beyond today’s numbers. The potential of virtualized processors that actually perform exactly like their originals, or better, is clearly something to wish for. However, being able to adjust, at any time, the exact speed at which they operate, still in strong temporal isolation from each other, may even give rise to programming paradigms beyond putting nanosleeps of the best-guessed amount at the right place. Here is how we believe temporal isolation can be done and even be made programmable. The core part is a real-time O(1)-scheduler based on the notion of variable-bandwidth servers (VBS), which we have recently developed [1]. A VBS has a bandwidth cap in percentage of CPU time, which determines the maximum CPU bandwidth available to the VBS guaranteed by the scheduler. Each VBS is in charge of exactly one scheduling task, which may be an instance of a virtual machine or just a process. New VBS and therefore new scheduling tasks are admitted to the system in constant time by checking if the sum of the bandwidth caps of the existing and new VBS remains less than or equal to the capacity of the host. In order to be scheduled, a new task chooses a so-called virtual periodic resource (λ,π), which determines the amount of time λ (called limit) the task is guaranteed to receive periodically at a given rate π (called period). Tasks can choose any virtual periodic resource and even switch subsequently from one resource to another at any time as long as the resulting CPU utilization λ over π remains less than or equal to the bandwidth cap of their associated VBS. Switching resources needs to follow a particular sequence of