Open source KVM full virtualization for ARM SoCs
Virtualization in embedded systems has emerged fairly recently. With the growth of complexity in both hardware and software systems, virtualization is increasingly becoming a key technology. ARM-based devices are seeing tremendous growth across smartphones, tablets, netbooks, embedded systems, networking, servers and automotive. ARM processors represent nowadays the most important architecture deployed in many market segments. While ARM CPUs have benefited from their advantages in power efficiency in these markets, they continue to increase in performance challenging the x86 CPUs for many classes of applications.
This is spurring the development of new ARM-based microservers, competing with traditional server and PC markets. KVM is an open source linux hypervisor implemented within the linux kernel and allows virtual machine creation with the help of userspace drivers. KVM works by exposing a simple interface to userspace (as shown in the figure below), through which a regular process becomes a virtual machine. Usually Quick Emulator (QEMU) is used on the userspace side to emulate I/O devices, and KVM handles Virtual CPUs and memory virtualization. Virtual Open Systems is at the front edge in the KVM on ARM development and any custom extension, required by specific ARM SoC architecture implementations.
The open source advantages of linux KVM compared to closed solutions
The primary differentiating factor between KVM and other virtualization techniques is the efficient implementation approach used by KVM. In other virtualization solutions, the virtual machine monitor (VMM) largely implements all major services like the scheduler, memory manager and timers. This results in a fairly large and complicated code base. On the contrary, KVM takes advantage of the existing code base within the linux kernel, such as the scheduler and memory management, thus resulting in a smaller code base hypervisor. This aspect allowed KVM to evolve at an impressive pace and to become one of the most full featured virtualization solutions.
KVM takes care of processor and memory virtualization at the kernel level, whereas the I/O devices are emulated in userspace, such as network interfaces and storage. An interface to userspace is exposed by KVM, so that devices can be emulated by the application setting up the virtual machine. Additionally, the same approach can be extended to the virtualization of GPU, hardware codecs and related API standards such as OpenGL and OpenMAX. Today KVM-on-ARM is very popular, for the following reasons:
- Native support for any Guest OS. As a bare metal, open source hypervisor KVM uses hardware-based virtualization to support almost any guest OS within linux with near native performance.
- Open source solution avoids vendor lock-in effects. Closed virtualization solutions force manufacturers to pay royalty fees. In addition, the development cost and the code port to future processor architectures are expensive.