Virtualization. What? Why? How?
In last 3-4 years, virtualization has gone from a marketing buzz word to becoming a necessity that every CIO will prioritize. But even today when I talk to a engineers and technologists, not everyone is sure what virtualization is and, more importantly, what it is not. So many times, it is confused with aspects of cloud computing. I think that an attempt to unravel the intricacies of virtualization will be a justified start to a new blog on the next generation computing technologies.
Essentially, virtualization is a collection of technologies that abstracts the physical infrastructure and isolates it from the computing utility that utilizes that infrastructure. In case of a server or a PC this means abstracting the CPU, memory and IO devices and allowing simultaneously running more than one OS images on single hardware (known as a "physical machine") by virtually dividing the hardware CPU, memory and IO resources among the "virtual machines" running those OS images. In this case, each OS image running on a virtual machine will behave as if it were running on a hardware with CPU, memory and IO resources (that are, in fact, assigned to it virtually). The diagram on right describes this concept. Don't worry if you do not know what a "hypervisor" is. We will talk about it below.
                              "Virtualization" generally refers to the concept mentioned above, i.e. "hardware virtualization". Today, there are different technologies also enabling what is called "Network Virtualization", "Storage Virtualization", "memory virtualization", etc. They rely on the basic virtualization technologies as explained below in detail and also some other innovative techniques specific to networking and storage hardware subsystems to achieve certain behavior analogous to "server virtualization" or "hardware virtualization". These topics are out of the scope of this post but I would emphasize that if you can grasp the details of "server virtualization", then you can easily understand the details of "Network Virtualization" and "Storage Virtualization" and the rationale behind it going forward. I promise to deal with them in future posts.
Getting back to server virtualization .......
There are three methods or types of server virtualization:
In Full Virtualization, hypervisor abstracts all hardware by capturing all I/O between an OS and the hardware. The guest OS is completely agnostic to the fact that it is running on a hypervisor and not natively on a physical machine. The advantage is that any guest OS can be run on a virtual machine without worrying about support for virtualization in the guest OS. Operating systems designed before virtualization can also be used on virtual machines. The potential disadvantage is that the system performance will degrade because the hypervisor needs to emulate each I/O operation of each virtual machine.
VMware ESXi enables full virtualization.
Just like Full Virtualization, a hypervisor is installed on a physical server and a guest OS is installed into the environment. But unlike Full Virtualization, the guest OS knows that it is operating in a virtualized environment. The guest operating systems require extensions to make API calls to the hypervisor. Not every operating system or application can support paravirtualization. This form of virtualization is generally performs more efficiently and faster than Full Virtualization, at least theoretically.
3. Hardware Assisted Virtualization:
Hardware Assisted Virtualization enables Full Virtualization by using hardware capabilities. Hardware-assisted virtualization relies on hardware extensions to the x86 system architecture to eliminate much of the hypervisor overhead associated with trapping and emulating I/O operations and status instructions executed within a guest OS. Hardware-assisted virtualization was added to x86 processors (Intel VT-x or AMD-V) in 2006. Most known hypervisors support Hardware-Assisted Virtualization.
Efficient resource utilization and complexity reduction:
By abstracting the hardware resources, isolating the utilities/applications and optimizing the placement of the utilities on hardware, virtualization enables very efficient use of hardware. Also, by reducing the total hardware requirement, virtualization simplifies an architecture.
Enabler of Cloud Computing:
Virtualization is the fundamental enabling technology for cloud computing. Virtualization is the technology that enables moving workload or application anywhere in the cloud and accessible from anywhere from different devices. There are a lot of different cloud architectures classified based on architecture, usage type, end goal, etc. but in the end the isolation of utility from the compute infrastructure, which is the fundamental principle of cloud computing, is enabled by virtualization.
Here is a brief introductory video on the concept of virtualization with some whiteboarding by Dan Chu of VMware.
If you are interested in understand the concepts of virtualization in greater details, here is a great free e-book by AMD.
If you interested in undersreading more about virtualization technologies and products, this is a good introductory book.