Introduction

This site aims to be a guide to the various virtualization solutions, focussing on the x86 architecture. It provides detailed technical insight into the different approaches and compares them. Focus lies on open source applications or free-of-charge software.

What is virtualization?

The short story: Virtualization allows to share the resources of a single machine (called: Host) among several separate operating systems (OS). Resources in this context include the CPU, memory, system level hardware (like timers and interrupt controllers) and I/O devices like network cards or storage devices (hard disks). The virtualiation core software (called: Hypervisor) provides the running OSes an abstraction which allows them to run concurrently at the same time on one machine.

What is not virtualization?

The term virtualization may be used in conjuction with other terms, this is how they differ:

History of Virtualization

Although Virtualization seems to be a more recent IT topic, the foundations go back into the 1970s with IBM hardware. To have a reason to sell large computers to the customers, they provides means to partition their large mainframes into several smaller units which ran independent instances of the operating system. Virtualization support was in the whole hardware, not only in the CPU.

Talks (currently in German only)

Chemnitzer Linux-Tage

Themenabend Virtualisierung (Chaos Computer Club Dresden (C3D2))

Chaos Radio Express Podcast (CRE092): Virtualisierung

more infos and download

Benchmarks

The following benchmarks provide an overview of the performance you can expect from the various solutions in various scenarios. Since serious benchmarking is a very complicated topic, please keep the following items in mind:

So be warned: Your mileage may vary...

pure CPU usage: Xen and KVM above 98%, qemu around 40%, kqemu around 95%

Stressing the FPU by calculating Pi by using a taylor sum approximation (Linux source code). Please don't use this if you want to compute the value of Pi, this one converges very slowly, but does a lot of self contained computations using only very little memory. This should show a performance very close to 100% on any real virtualization solution (since only user space code without impact on memory performance).

povray numbers: Xen and KVM above 95%, qemu & kqemu not measured

Stressing the FPU and the memory interface by rendering the benchmark scene (benchmark.inc) provided with the Persistence of Vision raytracer. There should be no I/O (the resulting image is discarded), but a high memory usage.

kernbench numbers: Xen around 80%, KVM 60%, pure qemu < 5%, kqemu not measured

kernbench stresses the system by compiling a Linux kernel. This loads the CPU, has a lot of memory accesses and does I/O to load source files and headers and to store the resulting object files. Besides that many processes are created and destroyed, resulting in very frequent system calls. The numbers were gathered while compiling a stock 2.6.25.3 Linux kernel with

make allnoconfig
on a Linux RAM disk (tmpfs) (to avoid real hardware I/O). The kernel was compiled five times in a row (plus a warmup run) and was only using a single job:
kernbench -n 5 -s -H -O -M