In Chapter 2, KVM as a Virtualization Solution, we started discussing KVM, QEMU, and various additional utilities that we can use to manage our KVM-based virtualization platform. As a machine emulator, QEMU will be used so that we can create and run our virtual machines on any supported platform – be it as an emulator or virtualizer. We’re going to focus our time on the second paradigm, which is using QEMU as a virtualizer. This means that we will be able to execute our virtual machine code directly on a hardware CPU below it, which means native or near-native performance and less overhead.
Bearing in mind that the overall KVM stack is built as a module, it shouldn’t come as a surprise that QEMU also uses a modular approach. This has been a core principle in the Linux world for many years, which further boosts the efficiency of how we use our physical resources.
When we add libvirt as a management platform on top of QEMU, we get access to some cool new utilities such as the
virsh command, which we can use to do virtual machine administration, virtual network administration, and a whole lot more. Some of the utilities that we’re going to discuss later on in this book (for example, oVirt) use libvirt as a standardized set of libraries and utilities to make their GUI-magic possible – basically, they use libvirt as an API. There are other commands that we get access to for a variety of purposes. For example, we’re going to use a command called
virt-host-validate to check whether our server is compatible with KVM or not.