Cloud resource virtualization

Virtualization, a basic tenet of cloud computing, simplifies some of the resource management tasks. For example, the state of a virtual machine (VM) running under a hypervisor can be saved and migrated to another server to balance the load. At the same time, virtualization allows users to operate in environments they are familiar with, rather than forcing them to work in idiosyncratic environments. This chapter starts with a discussion of virtualization principles and the motivation for virtualization in Section 5.1. Section 5.2 is focused on performance and security isolation. Alternatives for the implementation of virtualization are analyzed in Section 5.3. Two distinct approaches for processor virtualization, full virtualization and paravirtualization are presented in Section 5.4. Full virtualization is feasible when the hardware abstraction provided by the hypervisor is an exact replica of the physical hardware. In this case any operating system running on the hardware will run without modifications under a hypervisor implementing full virtualization. Paravirtualization requires modifications of the guest operating systems because the hardware abstraction provided by the hypervisor is not supported by the physical hardware. Traditional processor architectures were conceived for one level of control as they support two execution modes, the kernel and the user mode. In a virtualized environment, all resources are under the control of a hypervisor, and a second level of control is exercised by the guest OS. While two-level scheduling for sharing CPU cycles can be easily implemented, sharing of resources such as cache, memory, and I/O bandwidth is more intricate. In 2005 and 2006, the x86 processor architecture was extended to provide hardware support for virtualization, as discussed in Section 5.5. Nested virtualization allows hypervisors to run inside a VM, complicating even further the virtualization landscape. Section 5.6 covers QEMU, an open-source emulator and virtualizer. Several hypervisors are used nowadays; KVM, a virtualization infrastructure of the Linux kernel, is discussed in Section 5.7, and Xen and an optimization of its network performance are presented in Sections 5.8 and 5.9. Nested virtualization is analyzed in Section 5.10, followed by the presentation of trusted kernel virtualization in Section 5.11. High-performance processors have multiple functional units but do not provide explicit support for virtualization, as discussed in Section 5.12, which covers Itanium paravirtualization. System functions critical for the performance of a VM environment are cache and memory management, handling of privileged instructions, and I/O handling. Cache misses are an important source of performance degradation in a VM environment as we shall see in Section 5.13, which compares the performance of virtual machines. An overview of open-source software platforms for virtualization is presented in Section 5.14. The potential risks of virtualization are the subject of Section 5.15, and virtualization software is discussed in Section 5.16. Further readings and exercises and problems are contained in Sections 5.17 and 5.18.