Pre-Virtualization
Basic idea
The manual port of the host OS required in para-virtualization makes this process costly and produces a guest which is tied to a single hypervisor and unable to execute on bare hardware.
Pre-virtualization is a new virtualization technique developed jointly with the University of Karlsruhe and the University of NSW. Instead of manually para-virtualising the host, or attempting to rewrite binary code at load time, pre-virtualization rewrites the assembly-language output of the compiler, a process called compiler afterburning. This leads to a mostly automated process that maintains the original platform API. It makes pre-virtualization less expensive than para-virtualization in terms of engineering cost, and retains the ability to run a single OS binary either on bare hardware or on any supported hypervisor.
Pre-virtualization approaches
Two different afterburning techniques have been developed to do this:
- For the 32-bit Intel architecture, the team at the University of Karlsruhe augments the assembler with additional macros which automatically replace the sensitive instructions by virtualization code.
- For Itanium, the team at UNSW wrote a perl script that was invoked instead of the assembler (this is easy to arrange with the right compiler flags). The script rewrites the assembly code then invokes the real assembler.
The two approaches have different tradeoffs. The perl script approach is simpler and faster to get going, and requires no changes to existing code. But by modifying binutils, you don't need special flags to gcc, and you can incorporate other information from the compiler as to what to patch.
Releases
Our pre-virtualization work presently supports three hypervisors on the Itanium architecture.
vNUMA
Virtual NUMA (vNUMA) is a virtual machine monitor that provides a virtual shared-memory multiprocessor system on a cluster. Details are on the vNUMA web page.
Xen/ia64
Xen is a widely-used open-source hypervisor. Xen is one target for or pre-virtualised Linux and we are achieving the same (or better) performance as para-virtualised XenoLinux, with a fraction of the engineering cost.
Linux
Linux itself, more commonly used as a guest OS, can serve as a hypervisor, user-mode Linux (UML) is an example of this. While UML is an example of para-virtualised Linux, our Linux-on-Linux virtual machine achieves better performance with dramatically reduced engineering cost.
The Linux-on-Linux VMM is released as open source.
Publications
Matthew Chapman and Gernot Heiser vNUMA: A virtual shared-memory multiprocessor USENIX Annual Technical Conference, pp. 349–362, San Diego, USA, June, 2009 | ||
Joshua LeVasseur Device-driver reuse via virtual machines PhD Thesis, UNSW, Sydney, Australia, May, 2009 | ||
Joshua LeVasseur, Volkmar Uhlig, Matthew Chapman, Peter Chubb, Ben Leslie and Gernot Heiser Pre-virtualization: Slashing the cost of virtualization Technical Report PA005520, NICTA, October, 2005 |