Virtualization on Linux
I’ve been asked several times about what software I prefer to make and run virtual machines.
Here’s my summary.
I’ve started using VmWare Workstation since version 3.something. This is an awesome piece of software that nicely integrates into any Linux distribution. It has nice GUI with no manual file editing is required. Now it supports headless mode and multiple snapshot that makes these machines indispensable when used for development purposes. It is a commercial product and it costs money. I stopped using it when GSX server went out as a free product under VmWare Server name.
Basically a stripped down version of VmWare Workstation. Headless mode, management console, support of snapshots. It requires serial number that can be obtained for free from VmWare web site. We have experienced some minor performance and network problems on VmWare Server guests even when host CPU was not busy. This may have changed with VmWare Server 2 that is being rolled out now though. If you need a solution that will be easily controlled remotely with no manual config file changes then it may be suitable for you. The other disadvantage is the networking setup: it is easy and almost no configuration is needed, but in case of Host-Only networking all hosts do connect to the hub inside the vmnet* host interface. In case you need some strange routing setup you may not like it.
You can download VmWare Server and VmWare workstation from VmWare web site.
Completely OpenSource software. Used as development environment by OpenMoko and Android projects and can emulate wide range of architectures. It requires kqemu kernel module to speed up things and it is command-line driven application. It contains possibility to administer it remotely via TCP or local PTY socket. It is extremely simple to start. It uses regular tun/tap device found in your kernel to create virtual networking that appear as tun interfaces on the host and ethernet ones on your guests. No performance problems were found even under stress test. We have successfully run FreeBSD, Windows XP/2003, OpenSolaris and Linux guests using QEMU. I am using it now on my workstation. You might also need libvirt to make your virtual machines management easy.
You can download QEMU from Fabrice Bellard’s web page. You will also need kqemu sources if you want it to work really fast.
Kernel-based Virtual Machine is a project by Qumranet (now owned by RedHat) that lets linux kernel be a hypervisor for guest machines. The core of the system is now accepted into the mainline kernel. It uses AMD-V and Intel VT-X technologies to let unmodified guests to run under linux hypervisor by exporting kvm device node. Later on a modified version of Qemu uses this device to set up memory mappings and interrupts. It has dramatically developed over time, the early versions contained some incompatibilities with FreeBSD guests but now it looks like all is working. I am using it at the virtualization server providing Win2K3, Oracle Enterprise Linux with database and FreeBSD guests.
You can get KVM kernel module and userspace application from KVM web site.
User Mode Linux. This is as simple as running linux kernel as a process in the host system. You can have virtualized storage devices and network. You just configure some stock kernel with ARCH=um and get a regular ELF binary. Unfortunately I haven’t managed to do a lot with this setup yet but it looks pretty good under average webserver load and Ubuntu upgrade testing. There is a limited admin console (uml_mconsole) that will let you send ctrl+alt+del event or halt your guest kernel. It consumes a lot less resources than all of the mentioned above solutions because it does not need to emulate all the diversity of the hardware. If your project involves linux-only guests then you may want to give UML a try. After all it does not require patching your host kernel as it is the case with OpenVZ/Virtuozzo and you can apply all resource constraints to the running guest kernel that can be applied to all other processes. You can even run different kernel versions with different options.
You can get UML utilities from User-Mode-Linux web page. You can build UML kernel with sources from kernel.org.
I haven’t used VirtualBox a lot, the version shipped with Ubuntu 7.10 had CPU usage problems but it looks like these had been fixed since. It has nice UI with no manual tweaks so it can be used right out-of-the-virtualbox by everyone.
You can download VirtualBox from VirtualBox web site.
Unfortunately I had a lot less experience with Xen because it would have required me to modify my running system. OpenVZ/Virtuozzo were used only as a guest (I have one VPS running under OpenVZ). These options may be checked in the future and results will probably be posted here.
This should not be taken as the authoritative source but if you see something that does not match at all, please leave a comment about it.