Virtualization: Difference between revisions
imported>Howard C. Berkowitz (Started updating to support Cloud Computing) |
mNo edit summary |
||
(7 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
{{subpages}} | {{subpages}} | ||
{{TOC|right}} | {{TOC|right}} | ||
<onlyinclude> | |||
{{Image|Simple_Virtualization_Diagram.png|right|275px|A "computer running in a computer"}} | {{Image|Simple_Virtualization_Diagram.png|right|275px|A "computer running in a computer"}} | ||
In [[Computers|computing]], '''virtualization''' is a broad term that usually refers to the abstraction of resources on a computer. Usually this is accomplished using either a [[virtual machine]] or an [[operating system]] that has tools to enable virtual environments to run inside it. | In [[Computers|computing]], '''virtualization''' is a broad term that usually refers to the abstraction of resources on a computer. Usually this is accomplished using either a [[virtual machine]] or an [[operating system]] that has tools to enable virtual environments to run inside it. | ||
Line 6: | Line 7: | ||
A simple way of looking at virtualization is that you run a "computer in a computer." As a simple example of this, you can run a Nintendo emulator on a computer running Linux, Windows or Mac OS, allowing you to play games originally designed to run on a Nintendo Entertainment System (NES) on your computer. This is one example of virtualization - you're running a "virtual" NES on your ([[Intel]] [[x86]]) computer. | A simple way of looking at virtualization is that you run a "computer in a computer." As a simple example of this, you can run a Nintendo emulator on a computer running Linux, Windows or Mac OS, allowing you to play games originally designed to run on a Nintendo Entertainment System (NES) on your computer. This is one example of virtualization - you're running a "virtual" NES on your ([[Intel]] [[x86]]) computer. | ||
Terms used in this article refer to 'guests' and a 'host. | Terms used in this article refer to '''guests''' and a '''host'''. The host system is what runs the software that makes virtualization possible. A '''guest''' an operating system that runs inside a host. Another term used is '''instance''', which is the combination of a guest operating system and a specific client application context using it. The terms are blurred; a host can itself be a virtual machine. | ||
</onlyinclude> | |||
==Applications== | |||
The earliest applications of virtualization were to provide multiple operating systems on the same physical machine. As the technology became more reliable, it became a potential means of both making computing more cost-efficient and providing additional [[fault tolerance]]. | |||
Typical enterprise servers, for [[client-server]] applications, are underutilized; an industry rule of thumb is that 20% is typical. By encapsulating each client's application context with a copy of the OS, one produces instances that can reside in storage when not active and take processor & memory resources only when active, improving hardware utilization. It is also much easier to estimate resource requirements when only one client instance is associated with its own OS instance. | |||
==Full virtualization== | With the accurate resource estimation, it soon became common to use multiple servers, initially linked by a [[local area network]], to expand capacity and to provide backup. Extending this idea to resources over a [[wide area network]] led to the [[cloud computing]] paradigm. In practice, cloud computing distributes virtual instances over a large number of geographically distributed hosts. | ||
The use of [[multicore processor]]s may be a special case of moving instances among physical processors, although they often share the OS and only lower-level guests move, as [[thread]]s. Still, it is entirely possible that application virtualization might be used at the chip level. | |||
==Methods of virtualization== | |||
There are several ways to virtualize, differing in hardware requirements, and impact both on guest software and on performance. | |||
===Full virtualization=== | |||
Where the virtualization software being used completely encapsulates its guests - the guests are unaware that they are running on top of another host. This can have a negative impact on performance, but may be the only option for older operating systems that are virtualized, because they don't have the capability to be "host aware" as guests are in [[#paravirtualization|paravirtualization]]. | Where the virtualization software being used completely encapsulates its guests - the guests are unaware that they are running on top of another host. This can have a negative impact on performance, but may be the only option for older operating systems that are virtualized, because they don't have the capability to be "host aware" as guests are in [[#paravirtualization|paravirtualization]]. | ||
==Operating system level vrtualization== | ===Operating system level vrtualization=== | ||
Generally OS level virtualization involves one running [[kernel]] in a system, but several virtual environments running inside that kernel. [[OpenVZ]], [[User Mode Linux]] and [[Solaris Zone|Solaris Zones]] are examples of virtualization solutions that utilize OS level virtualization. | Generally OS level virtualization involves one running [[kernel]] in a system, but several virtual environments running inside that kernel. [[OpenVZ]], [[User Mode Linux]] and [[Solaris Zone|Solaris Zones]] are examples of virtualization solutions that utilize OS level virtualization. | ||
==Paravirtualization== | ===Paravirtualization=== | ||
{{Image|Simple_Paravirtualization_Diagram.png|right|275px|A very simple illustration of several virtual machines running on top of a host (called the dom0 in this example)}} | {{Image|Simple_Paravirtualization_Diagram.png|right|275px|A very simple illustration of several virtual machines running on top of a host (called the dom0 in this example)}} | ||
When several 'virtual machines' run on top of a 'host' operating system this is known as paravirtualization. If a guest is completely virtualized and is unaware that it is in fact running in a VM, this can have a performance impact. Certain [[Linux] [kernel|kernels]] have been created that are "virtuzliation aware" for example, and they run faster in a VM because they have been optimized to run in a virtual machine. | When several 'virtual machines' run on top of a 'host' operating system this is known as paravirtualization. If a guest is completely virtualized and is unaware that it is in fact running in a VM, this can have a performance impact. Certain [[Linux] [kernel|kernels]] have been created that are "virtuzliation aware" for example, and they run faster in a VM because they have been optimized to run in a virtual machine. | ||
Line 23: | Line 33: | ||
[[Microsoft|Microsoft's]] flagship virtualization platform, [[Hyper-V]], supports running Linux Xen guests. Currently only [[SUSE Linux Enterprise Server]] version 10 is fully supported.<ref>http://www.microsoft.com/windowsserver2008/en/us/hyperv-supported-guest-os.aspx</ref> | [[Microsoft|Microsoft's]] flagship virtualization platform, [[Hyper-V]], supports running Linux Xen guests. Currently only [[SUSE Linux Enterprise Server]] version 10 is fully supported.<ref>http://www.microsoft.com/windowsserver2008/en/us/hyperv-supported-guest-os.aspx</ref> | ||
<onlyinclude> | |||
==Reasons for virtualization== | |||
===Server=== | |||
Please see the [[Virtual server]] article. | |||
===Desktop=== | |||
Using virtualization in a desktop environment, one PC can run applications for multiple operating systems. Microsoft, for example, has an XP Pro compatibility mode for Windows 7, which runs in Virtual PC. Concurrent LINUX and Windows is useful in many situations. | |||
It can be useful to run multiple instances of the same operating system. A developer might want to run a testing instance while running a general office productivity application on another. | |||
===Compatibility=== | |||
For [[backwards compatibility]], newer operating systems use virtualization to support older software products that otherwise would have to be rewritten in order to run. | |||
Newer versions of Microsoft Windows (those based on the [[Microsoft Windows|Windows NT Core]]) automatically start a behind-the-scenes built-in virtual machine called NTVDM (the NT Virtual DOS Machine) when DOS programs are run. The NTVDM runs DOS in a virtual machine on top of Windows. This can be observed by going to Start -> Run, typing in command.com and hitting "OK". If you run Task Manager, you can also see the <code>NTVDM.EXE</code> process running. | |||
[[ | Another example of virtual machine implementation is in versions of [[Apple Inc|Apple]]'s [[Mac OS X]]. As with Windows NT, OS X was a complete redesign from scratch, and programs written for its predecessor OS 9 could not run natively. A virtual machine called the [[Blue box]] was created to run a full copy of OS 9 on top of OS X, in order to allow older programs to execute. When Apple changed their hardware from the [[PowerPC]] architecture to an Intel [[x86]]-based system architecture, the blue box was deprecated. | ||
</onlyinclude> | |||
==Virtualization environments== | |||
Xen, VMware and Microsoft Hyper-V are examples of software products that implement paravirtualization. | |||
===Xen=== | ===Xen=== | ||
{{main|Xen}} | {{main|Xen}} | ||
Xen.org is an [[open source]] community that supports the various Xen software. <ref name=WIX>{{citation | Xen.org is an [[open source]] community that supports the various Xen software. Essentially, Xen was devised as a hypervisor for host virtualization and has been the main non-proprietary hypervisor used in cloud computing.<ref name=WIX>{{citation | ||
| title = What is Xen? | | title = What is Xen? | ||
| url = http://www.xen.org/files/Marketing/WhatisXen.pdf | | url = http://www.xen.org/files/Marketing/WhatisXen.pdf | ||
Line 52: | Line 79: | ||
===VMware=== | ===VMware=== | ||
===Hyper-V=== | ===Hyper-V=== | ||
==References== | ==References== | ||
{{reflist|2}} | {{reflist|2}} | ||
[[Category:Suggestion Bot Tag]] |
Latest revision as of 17:00, 5 November 2024
In computing, virtualization is a broad term that usually refers to the abstraction of resources on a computer. Usually this is accomplished using either a virtual machine or an operating system that has tools to enable virtual environments to run inside it.
A simple way of looking at virtualization is that you run a "computer in a computer." As a simple example of this, you can run a Nintendo emulator on a computer running Linux, Windows or Mac OS, allowing you to play games originally designed to run on a Nintendo Entertainment System (NES) on your computer. This is one example of virtualization - you're running a "virtual" NES on your (Intel x86) computer.
Terms used in this article refer to guests and a host. The host system is what runs the software that makes virtualization possible. A guest an operating system that runs inside a host. Another term used is instance, which is the combination of a guest operating system and a specific client application context using it. The terms are blurred; a host can itself be a virtual machine.
Applications
The earliest applications of virtualization were to provide multiple operating systems on the same physical machine. As the technology became more reliable, it became a potential means of both making computing more cost-efficient and providing additional fault tolerance.
Typical enterprise servers, for client-server applications, are underutilized; an industry rule of thumb is that 20% is typical. By encapsulating each client's application context with a copy of the OS, one produces instances that can reside in storage when not active and take processor & memory resources only when active, improving hardware utilization. It is also much easier to estimate resource requirements when only one client instance is associated with its own OS instance.
With the accurate resource estimation, it soon became common to use multiple servers, initially linked by a local area network, to expand capacity and to provide backup. Extending this idea to resources over a wide area network led to the cloud computing paradigm. In practice, cloud computing distributes virtual instances over a large number of geographically distributed hosts.
The use of multicore processors may be a special case of moving instances among physical processors, although they often share the OS and only lower-level guests move, as threads. Still, it is entirely possible that application virtualization might be used at the chip level.
Methods of virtualization
There are several ways to virtualize, differing in hardware requirements, and impact both on guest software and on performance.
Full virtualization
Where the virtualization software being used completely encapsulates its guests - the guests are unaware that they are running on top of another host. This can have a negative impact on performance, but may be the only option for older operating systems that are virtualized, because they don't have the capability to be "host aware" as guests are in paravirtualization.
Operating system level vrtualization
Generally OS level virtualization involves one running kernel in a system, but several virtual environments running inside that kernel. OpenVZ, User Mode Linux and Solaris Zones are examples of virtualization solutions that utilize OS level virtualization.
Paravirtualization
When several 'virtual machines' run on top of a 'host' operating system this is known as paravirtualization. If a guest is completely virtualized and is unaware that it is in fact running in a VM, this can have a performance impact. Certain [[Linux] [kernel|kernels]] have been created that are "virtuzliation aware" for example, and they run faster in a VM because they have been optimized to run in a virtual machine.
When an operating system runs inside a virtual machine in this way it runs a completely separate kernel, and in fact can be an entirely different operating system. There are real world examples of virtual machines running Microsoft Windows that run on top of a Linux Xen host, for example. The reverse is also possible - Linux can run inside a virtual machine that runs on top of Windows Server for example.
Microsoft's flagship virtualization platform, Hyper-V, supports running Linux Xen guests. Currently only SUSE Linux Enterprise Server version 10 is fully supported.[1]
Reasons for virtualization
Server
Please see the Virtual server article.
Desktop
Using virtualization in a desktop environment, one PC can run applications for multiple operating systems. Microsoft, for example, has an XP Pro compatibility mode for Windows 7, which runs in Virtual PC. Concurrent LINUX and Windows is useful in many situations.
It can be useful to run multiple instances of the same operating system. A developer might want to run a testing instance while running a general office productivity application on another.
Compatibility
For backwards compatibility, newer operating systems use virtualization to support older software products that otherwise would have to be rewritten in order to run.
Newer versions of Microsoft Windows (those based on the Windows NT Core) automatically start a behind-the-scenes built-in virtual machine called NTVDM (the NT Virtual DOS Machine) when DOS programs are run. The NTVDM runs DOS in a virtual machine on top of Windows. This can be observed by going to Start -> Run, typing in command.com and hitting "OK". If you run Task Manager, you can also see the NTVDM.EXE
process running.
Another example of virtual machine implementation is in versions of Apple's Mac OS X. As with Windows NT, OS X was a complete redesign from scratch, and programs written for its predecessor OS 9 could not run natively. A virtual machine called the Blue box was created to run a full copy of OS 9 on top of OS X, in order to allow older programs to execute. When Apple changed their hardware from the PowerPC architecture to an Intel x86-based system architecture, the blue box was deprecated.
Virtualization environments
Xen, VMware and Microsoft Hyper-V are examples of software products that implement paravirtualization.
Xen
Xen.org is an open source community that supports the various Xen software. Essentially, Xen was devised as a hypervisor for host virtualization and has been the main non-proprietary hypervisor used in cloud computing.[2] Major components of Xen are:
- Hypervisor
- Domain 0 Guest (Dom0)
- Domain Guests (DomU)
The Xen hypervisor runs directly on the hardware and becomes the interface for all hardware requests such as CPU, I/O, and disk for the guest operating systems. By separating the guests from the hardware, the Xen hypervisor is able to run multiple operating systems securely and independently.
"The Domain 0 Guest referred to as Dom0 is launched by the Xen hypervisor during initial system start-up and can run any operating system except Windows. The Dom0 has unique privileges to access the Xen hypervisor that is not allocated to any other Domain Guests. These privileges allow it to manage all aspects of Domain Guests such as starting, stopping, I/O requests, etc. A system administrator can log into Dom0 and manage the entire computer system."
"The Domain Guests referred to as DomUs are launched and controlled by the Dom0 and independently operate on the system. These guests are either run with a special modified operating system referred to as paravirtualizion or un-modified operating systems leveraging special virtualization hardware (Intel VT and AMD-V) referred to as hardware virtual machine (HVM)." To run on Xen, Microsoft Windows requires a HVM Guest environment