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.
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.
Our pre-virtualization work presently supports three hypervisors on the Itanium architecture.
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 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 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.
|Matthew Chapman and Gernot Heiser|
vNUMA: A virtual shared-memory multiprocessor
USENIX Annual Technical Conference, pp. 349-362, San Diego, USA, June, 2009
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