In my last article, I discussed various technologies from companies including VMware, Virtual Iron, Citrix, and Microsoft. These software solutions enable virtualization, the technology that enables sharing physical computing resources such as CPUs, memory, storage, and networks among multiple different servers. Virtualization enables maximizing the utilization of computing investment, savings in energy costs and data center floor space, and provides compelling technology options for both large and small networks.
In that previous discussion, I stepped through the creation of a virtual Host machine, which is a single physical computer that can run multiple servers simultaneously. I used a Windows XP Pro machine as my Host, and then created two virtual machines. One virtual machine was created running Linux, the other running an open source NAS appliance. I used VMware's free VMware Server on my Host virtualization platform, Ubuntu for my virtual Linux machine, and the BSD-based FreeNAS distribution for my virtual NAS appliance.
In this article, I'm going to examine some of the network performance aspects of virtualization as well as the underlying operations that enable a virtual machine to interact with a network. I'll also go into some configuration options that can be used to optimize network performance for virtualization.
The "Virtual Layer"
A key to understanding virtualization involves the idea of layering. At the physical layer of any computer is the hardware, which includes the motherboard, CPU(s), RAM, hard drive(s), NIC(s) and various other physical components. As depicted in Figure 1, the physical computer hardware sits at the bottom layer, with multiple layers of software implemented to enable the desired computing functionality.
Figure 1: Multiple layers are involved in virtualization
Software is required to operate the physical layer. Within each motherboard is the BIOS, or Basic Input/Output Software. The BIOS is the first software layer that controls the physical elements of a computer.
Traditionally, the second software layer is the operating system, such as Windows, UNIX, Linux, BSD, and so forth. In a typical computer, the operating system software interacts between applications and the BIOS to provide drivers and control the input and output of data to all the physical components of the computer. The limitation of this two-software layer scenario is that only one operating system can use the physical components of the computer.
Between the first and second software layers is where virtualization plays. Virtualization takes over the control of all the hardware between the BIOS and the Guest operating systems, providing a consistent set of drivers to the virtual machines, regardless of the underlying hardware.
Virtualization can be achieved in multiple scenarios. In this article and the previous, we're using Windows XP Pro as the Host operating system residing in the layer above the BIOS. We're running VMware Server software to provide a virtualization layer for Guest operating systems. This essentially creates four layers of software above the hardware: the BIOS, the Host operating system, the virtualization software, and the Guest operating systems.
Alternatively, and more efficiently, virtualization can be achieved without a Host operating system using software known as a Hypervisor that resides right above the BIOS. This is a three-layer model, and more efficient, as the Hypervisor is a very thin piece of software residing between the BIOS and the Guest operating systems. Hypervisor software, such as VMware?s subscription based ESX3.1 is only 32MB in size and comes preloaded in the firmware of servers from various companies, including Dell, Fujitsu Siemens, HP, IBM, and NEC.
In either virtualization scenario, Guest operating systems do not directly interact with the BIOS. Guest operating systems, or virtual machines, interact with the virtualization layer, which then controls the hardware for the Guest OS.
The point is that virtualization adds one to two software layers between the operating system and hardware, which brings us to the question of performance. Can virtual machines perform as well over networks as physical machines, considering the processing overhead of the added layers of software?