ARMvisor: System Virtualization for ARMChieh Hao Tsang
In recent years, system virtualization technology has been gradually shifted its focus from data centers to embedded systems for enhancing security, simplifying the process of application porting as well as increasing system robustness and reliability. In traditional server which are mostly based on x86 or PowerPC processors, Kernel-based Virtual Machine (KVM) is a commonly adopted virtual machine monitor. However, there is no such KVM implementations available for the ARM ar- chitecture which dominates modern embedded systems. In order to understand the challenges of system virtual- ization for embedded systems, we have implemented a hypervisor, called ARMvisor, which is based on KVM for the ARM architecture.
In a typical hypervisor, there are three major compo- nents: CPU virtualization, memory virtualization, and I/O virtualization. For CPU virtualization, ARMvisor uses traditional "trap and emulation" to deal with sensi- tive instructions. Since there is no hardware support for virtualization on the V6 and earlier ARM architecture, we have to patch the guest OS to force critical instruc- tions to trap. For memory virtualization, the function- ality of MMU which translates a guest virtual address to host physical address is emulated. In ARMvisor, a shadow page table is dynamically allocated to avoid the inefficiency and inflexibility of static allocation for the guest OSes. In addition, ARMvisor uses R-Map to take care of protecting the memory space of the guest OS. For I/O virtualization, ARMvisor relies on QEMU to emulate I/O devices. We have implemented KVM on ARM-based Linux kernel for all three components in ARMvisor. At this time, we can successfully run a guest Ubuntu system on an Ubuntu host OS with ARMvisor on the ARM-based TI Beagleboard.