IaaS data centers offer virtual machines (VMs) to their clients, who in turn sometimes deploy their own virtualized environments, thereby running a VM inside a VM. This is known as nested virtualization.
VMs are intrinsically slower than bare-metal execution, as they often trap into their hypervisor to perform tasks like operating virtual I/O devices. Each VM trap requires loading and storing dozens of registers to switch between the VM and hypervisor contexts,thereby incurring costly runtime overheads. Nested virtualization further magnifies these overheads, as every VM trap in a traditional virtualized environment triggers at least twice as many traps.
We propose to leverage the replicated thread execution resources in simultaneous multithreaded (SMT) cores to alleviate the over-heads of VM traps in nested virtualization. Our proposed architecture introduces a simple mechanism to colocate different VMs and hypervisors on separate hardware threads of a core, and replaces the costly context switches of VM traps with simple thread stall and resume events. More concretely, as each thread in an SMT core has its own register set, trapping between VMs and hypervisors does not involve costly context switches, but simply requires the core to fetch instructions from a different hardware thread. Furthermore,our inter-thread communication mechanism allows a hypervisor to directly access and manipulate the registers of its subordinate VMs,given that they both share the same in-core physical register file.
A model of our architecture shows up to 2.3x and 2.6x better I/O latency and bandwidth, respectively. We also show a software-only prototype of the system using existing SMT architectures, with up to 1.3x and 1.5x better I/O latency and bandwidth, respectively, and 1.2–2.2x speedups on various real-world applications.