In computing, hardware-assisted virtualization is a platform virtualization approach that enables efficient full virtualization using help from hardware capabilities, primarily from the host processors. A Full virtualization is used to simulate 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 added to x86 processors (Intel VT-x or AMD-V) in 2005 and 2006 (respectively).
Hardware-assisted virtualization first appeared on the IBM System/370 in 1972, for use with VM/370, the first virtual machine operating system. With the increasing demand for high-definition computer graphics (e.g. CAD), virtualization of mainframes lost some attention in the late 1970s, when the upcoming minicomputers fostered resource allocation through distributed computing, encompassing the commoditization of microcomputers.
IBM offers hardware virtualization for its POWER CPUs under AIX (e.g. System p) and for its IBM-Mainframes System z. IBM refers to its specific form of hardware virtualization as "logical partition", or more commonly as LPAR.
The increase in compute capacity per x86 server (and in particular the substantial increase in modern networks' bandwidths) rekindled interest in data-center based computing which is based on virtualization techniques. The primary driver was the potential for server consolidation: virtualization allowed a single server to cost-efficiently consolidate compute power on multiple underutilized dedicated servers. The most visible hallmark of a return to the roots of computing is cloud computing, which is a synonym for data center based computing (or mainframe-like computing) through high bandwidth networks. It is closely connected to virtualization.
The initial implementation x86 architecture did not meet the Popek and Goldberg virtualization requirements to achieve "classical virtualization":
- equivalence: a program running under the virtual machine monitor (VMM) should exhibit a behavior essentially identical to that demonstrated when running on an equivalent machine directly
- resource control (also called safety): the VMM must be in complete control of the virtualized resources
- efficiency: a statistically dominant fraction of machine instructions must be executed without VMM intervention
To compensate for these architectural limitations, designers have accomplished virtualization of the x86 architecture through two methods: 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.
- Full virtualization was implemented in first-generation x86 VMMs. It relies on binary translation to trap and virtualize the execution of certain sensitive, non-virtualizable instructions. With this approach, critical instructions are discovered (statically or dynamically at run-time) and replaced with traps into the VMM to be emulated in software. Binary translation can incur a large performance overhead in comparison to a virtual machine running on natively virtualized architectures such as the IBM System/370. VirtualBox, VMware Workstation (for 32-bit guests only), and Microsoft Virtual PC, are well-known commercial implementations of full virtualization.
- Paravirtualization is a technique in which the hypervisor provides an API and the OS of the guest virtual machine calls that API, requiring OS modifications.
In 2005 and 2006, Intel and AMD (working independently) created new processor extensions to the x86 architecture called Intel VT-x and AMD-V, respectively. On the Itanium architecture, hardware-assisted virtualization is known as VT-i. The first generation of x86 processors to support these extensions were released in late 2005 early 2006:
- On November 13, 2005, Intel released two models of Pentium 4 (Model 662 and 672) as the first Intel processors to support VT-x.
- On May 23, 2006, AMD released the Athlon 64 ("Orleans"), the Athlon 64 X2 ("Windsor") and the Athlon 64 FX ("Windsor") as the first AMD processors to support this technology.
Well-known implementations of hardware-assisted x86 virtualization include VMware Workstation (for 64-bit guests only), XenCenter, Xen 3.x (including derivatives like Virtual Iron), Linux KVM and Microsoft Hyper-V.
Hardware-assisted virtualization reduces the maintenance overhead of paravirtualization as it reduces (ideally, eliminates) the changes needed in the guest operating system. It is also considerably easier to obtain better performance. A practical benefit of hardware-assisted virtualization has been cited by VMware engineers and Virtual Iron.
Hardware-assisted virtualization requires explicit support in the host CPU, which is not available on all x86/x86_64 processors.
A "pure" hardware-assisted virtualization approach, using entirely unmodified guest operating systems, involves many VM traps, and thus high CPU overheads, limiting scalability and the efficiency of server consolidation. This performance hit can be mitigated by the use of paravirtualized drivers; the combination has been called "hybrid virtualization".
In 2006 first-generation 32- and 64-bit x86 hardware support was found rarely to offer performance advantages over software virtualization.
- Intel VT-d
- Further refinements of hardware-assisted virtualization are possible using an IOMMU; this allows native-speed access to dedicated hardware from a guest operating system, including DMA-capable hardware
- Second Level Address Translation (SLAT), implementations including Rapid Virtualization Indexing or Extended Page Tables
- Other virtualization techniques include operating system-level virtualization, as practiced by Parallels Virtuozzo Containers, and application virtualization.
- Hardware emulation
- Joint Test Action Group
- Background Debug Mode interface
- In-circuit emulator
- Adams, Keith. "A Comparison of Software and Hardware Techniques for x86 Virtualization" (PDF). Retrieved 20 January 2013.
- Chris Barclay, New approach to virtualizing x86s, Network World, 10/20/2006
- See "Graphics and I/O virtualization".
- See "Hybrid Virtualization: The Next Generation of XenLinux". Archived March 20, 2009, at the Wayback Machine
- Jun Nakajima and Asit K. Mallick, "Hybrid-Virtualization—Enhanced Virtualization for Linux" Archived 2009-01-07 at the Wayback Machine, in Proceedings of the Linux Symposium, Ottawa, June 2007.
- A Comparison of Software and Hardware Techniques for x86 Virtualization, Keith Adams and Ole Agesen, VMware, ASPLOS’06 October 21–25, 2006, San Jose, California, USA"Surprisingly, we find that the first-generation hardware support rarely offers performance advantages over existing software techniques. We ascribe this situation to high VMM/guest transition costs and a rigid programming model that leaves little room for software flexibility in managing either the frequency or cost of these transitions.
- Fisher-Ogden, John. "Hardware Support for Efficient Virtualization" (PDF). UCSD. Retrieved 2010-08-05.
- Smith, Jim; Nair, Ravi (2005). Virtual Machines. Morgan Kaufmann. 8.5 : Performance Enhancement of System Virtual Machines. ISBN 1-55860-910-5.
- Osisek, D. L.; Jackson, K. M.; Gum, P. H. (1991). "ESA/390 interpretive-execution architecture, foundation for VM/ESA" (PDF). IBM Systems Journal. 30 (1): 34–51. doi:10.1147/sj.301.0034.
- Adams, Keith; Agesen, Ole (2006). A Comparison of Software and Hardware Techniques for x86 Virtualization (PDF). International Conference on Architectural Support for Programming Languages and Operating Systems, San Jose, CA, USA. ACM 1-59593-451-0/06/0010. Retrieved 2006-12-22.
- "Performance Evaluation of AMD RVI Hardware Assist" (PDF). VMware.
- "Performance Evaluation of Intel EPT Hardware Assist" (PDF). VMware.