Native virtualization

From Wikipedia, the free encyclopedia

Main article: virtualization

Native virtualization, in which the VM simulates complete hardware to allow operation of an umodified operating system for the same type of CPU to execute within the virtual machine container in complete isolation. Native virtualization leverages hardware-assisted capabilities available in the latest processors from Intel (Intel VT) and Advanced Micro Devices (AMD-V) to provide near-native performance. Prior to these processors, the x86 architecture did not meet some fundamental requirements for virtualization, making it difficult to implement a virtual machine monitor for this type of processor. These requirements include: equivalence - a program running under the virtual machine should exhibit a behavior essentially identical to the original physical machine; resource control - the virtual machine must be in complete control of the virtualized resources and efficiency - where the virtual machine should not significantly degrade workload performance.

Native virtualization is also known as accelerated virtualization or hybrid virtualization, is a combination of full virtualization and I/O acceleration techniques; and is often used to greatly improve performance of full virtualization. Typically, this method starts with a Virtual Machine Monitor capable of full virtualization and then, based on performance analysis, selectively employs acceleration techniques.

IO and Network drivers are the most common areas to accelerate in native virtualization.

Contents

[edit] History

Historically virtualization of the x86 architecture has been accomplished in two ways: through full virtualization or paravirtualization. Both create the illusion of physical hardware to achieve the goal of operating system independence from the hardware but present some trade-offs in performance and complexity.

Paravirtualization, as a technique for virtualizing x86 architecture, has primarily been used for university research - Denali or Xen. The research projects employ this technique to run modified versions of operating systems, for which source code is readily available (such as Linux and FreeBSD). Paravirtualized virtual machine provides a special API requiring substantial OS modifications. The best known commercial implementations of paravirtualization are modified Linux kernels from XenSource [1] and GNU/Linux distributors.

Full virtualization is implemented in first-generation VMMs in use today. It relies on sophisticated, software techniques to trap and virtualize the execution of certain sensitive, nonvirtualizable instructions in software via binary patching. With these techniques, critical instructions are discovered at run-time and replaced with a trap into the VMM to be emulated in software. These methods incur large performance overhead as compared with a virtual machine running on natively virtualized architectures such as the IBM System/370. VMware and VirtualPC are the two best known commercial implementations of full virtualization.

With native virtualization, the VMM can efficiently virtualize the x86 instruction set by handling the sensitive, nonvirtualizable instructions using a classic trap-and-emulate model in hardware vs. software. It also uses performance analysis to selectively employ acceleration techniques for memory and I/O operations. The best known implementations of native virtualization are virtualization of 64-bit x86 operating systems by VMware and virtualization of 32 and 64-bit x86 operating systems by Virtual Iron.

Other virtualization techniques are: operating system-level virtualization - as practiced by Virtuozzo; and application virtualization.

[edit] Pros

Native virtualization reduces the maintenance overhead of paravirtualization as it restricts the amount of changes needed in the guest operating system. It is also considerably easier to obtain better performance. A practical benefit of native virtualization that has been cited by VMware engineers[2] and Virtual Iron [3].

[edit] Cons

Since native virtualization requires loading of modules into guest (usually in the form of special drivers), it may affect support contracts from GNU/Linux distributors that restrict loading of binary driver modules into the kernel.

[edit] See also

Nanokernel

[edit] External links

General links