Hardware virtualization (or
platform virtualization) pools computing resources across one or more
virtual machines. A virtual machine implements functionality of a (physical) computer with an operating system. The software or
firmware that creates a virtual machine on the host hardware is called a
hypervisor or
virtual machine monitor. Different types of hardware virtualization include: •
Full virtualization – Almost complete virtualization of the actual hardware to allow software environments, including a guest operating system and its apps, to run unmodified. •
Paravirtualization – The guest apps are executed in their own isolated domains, as if they are running on a separate system, but a hardware environment is not simulated. Guest programs need to be specifically modified to run in this environment. •
Hybrid virtualization – Mostly full virtualization but utilizes paravirtualization drivers to increase
virtual machine performance.
Full virtualization Full virtualization employs techniques that pools physical computer resources into one or more instances; each running a virtual environment where any software or operating system capable of execution on the raw hardware can be run in the virtual machine. Two common full virtualization techniques are typically used: (a) binary translation and (b) hardware-assisted full virtualization. Hardware-assisted virtualization allows guest operating systems to be run in isolation with virtually no modification to the (guest) operating system. Full virtualization requires that every salient feature of the hardware be reflected into one of several virtual machines – including the full instruction set,
input/output operations, interrupts, memory access, and whatever other elements are used by the software that runs on the
bare machine, and that is intended to run in a virtual machine. This approach was pioneered in 1966 with the IBM
CP-40 and
CP-67, predecessors of the
VM family.
Binary translation In
binary translation, instructions are translated to match the emulated hardware architecture, if the virtual machine implements a different
instruction set architecture from that of the hardware on which the virtual machine is being run, or to allow the
hypervisor to catch hardware references that it must emulate, if the virtual machine implements the same instruction set architecture as the hardware on which the virtual machine is being run.
Hardware-assisted Hardware-assisted virtualization (or
accelerated virtualization; Xen calls it hardware virtual machine (HVM), and Virtual Iron calls it native virtualization) is a way of improving overall efficiency of hardware virtualization using help from the host processors. A full virtualization is used to emulate a complete hardware environment, or
virtual machine, in which an unmodified guest
operating system (using the same
instruction set as the host machine) effectively executes in complete isolation. Hardware-assisted virtualization was first introduced on the
IBM 308X processors in 1980, with the Start Interpretive Execution (SIE) instruction. It was added to
x86 processors (
Intel VT-x,
AMD-V or
VIA VT) in 2005, 2006 and 2010 respectively.
IBM offers
hardware virtualization for its
IBM Power Systems hardware for
AIX,
Linux and
IBM i, and for its
IBM Z mainframes. IBM refers to its specific form of hardware virtualization as "logical partition", or more commonly as
LPAR. Hardware-assisted virtualization reduces the maintenance overhead of binary translation based virtualization as it reduces (ideally, eliminates) the code that needs to be translated in the guest operating system. It is also considerably easier to obtain better performance.
Paravirtualization Paravirtualization is a virtualization technique that presents a software interface to the
virtual machines which is similar, yet not identical, to the underlying hardware–software interface. Paravirtualization improves performance and efficiency, compared to full virtualization, by having the guest operating system communicate with the hypervisor. By allowing the guest operating system to indicate its intent to the hypervisor, each can cooperate to obtain better performance when running in a virtual machine. The intent of the modified interface is to reduce the portion of the guest's execution time spent performing operations which are substantially more difficult to run in a virtual environment compared to a non-virtualized environment. The paravirtualization provides specially defined 'hooks' to allow the guest(s) and host to request and acknowledge these tasks, which would otherwise be executed in the virtual domain (where execution performance is worse). A successful paravirtualized platform may allow the
virtual machine monitor (VMM) to be simpler (by relocating execution of critical tasks from the virtual domain to the host domain), and/or reduce the overall performance degradation of machine execution inside the virtual guest. Paravirtualization requires the guest
operating system to be explicitly
ported for the para-
API – a conventional OS distribution that is not paravirtualization-aware cannot be run on top of a paravirtualizing VMM. However, even in cases where the operating system cannot be modified, components may be available that enable many of the significant performance advantages of paravirtualization. For example, the Xen Windows
GPLPV project provides a kit of paravirtualization-aware device drivers, that are intended to be installed into a
Microsoft Windows virtual guest running on the
Xen hypervisor. Such applications tend to be accessible through the paravirtual machine interface environment. This ensures run-mode compatibility across multiple encryption algorithm models, allowing seamless integration within the paravirtual framework.
History The term "paravirtualization" was first used in the research literature in association with the
Denali Virtual Machine Manager. The term is also used to describe the
Xen,
L4, TRANGO,
VMware,
Wind River and XtratuM
hypervisors. All these projects use or can use paravirtualization techniques to support high performance virtual machines on
x86 hardware by implementing a virtual machine that does not implement the hard-to-virtualize parts of the actual x86 instruction set. In 2005, VMware proposed a paravirtualization interface, the Virtual Machine Interface (VMI), as a communication mechanism between the guest operating system and the hypervisor. This interface enabled transparent paravirtualization in which a single binary version of the operating system can run either on native hardware or on a hypervisor in paravirtualized mode. The first appearance of paravirtualization support in Linux occurred with the merge of the ppc64 port in 2002, which supported running Linux as a paravirtualized guest on IBM pSeries (RS/6000) and iSeries (AS/400) hardware. At the USENIX conference in 2006 in
Boston, Massachusetts, a number of Linux development vendors (including IBM, VMware, Xen, and Red Hat) collaborated on an alternative form of paravirtualization, initially developed by the Xen group, called "paravirt-ops". The paravirt-ops code (often shortened to pv-ops) was included in the mainline
Linux kernel as of the 2.6.23 version, and provides a hypervisor-agnostic interface between the hypervisor and guest kernels. Distribution support for pv-ops guest kernels appeared starting with Ubuntu 7.04 and RedHat 9. Xen hypervisors based on any 2.6.24 or later kernel support pv-ops guests, as does VMware's Workstation product beginning with version 6.
Hybrid virtualization Hybrid virtualization combines full virtualization techniques with paravirtualized drivers to overcome limitations with hardware-assisted full virtualization. A hardware-assisted full virtualization approach uses an unmodified guest operating system that involves many VM traps producing high CPU overheads limiting scalability and the efficiency of server consolidation. The hybrid virtualization approach overcomes this problem. == Desktop virtualization ==