Software Woes

Rants, tips and tricks

Wednesday, August 08, 2007

QEmu vs VMWare benchmark

Some time ago I did a benchmark comparison of VMWare and QEmu (using kqemu acceleration). I get asked about it so often, that I decided to post it on the blog. My tests involve memory and CPU intensive operations like compiling, so it might not be what you're using your virtual machine for, but I only use VMs to test my applications on various platforms.

Host System:

Slackware 10.2, vanilla 2.6.13 kernel that comes with it
RAM: 512MB
CPU: AMD Turion64 MT30
It is a 64bit CPU, but I only run 32bit OS.

QEmu 0.8.2
- using slack10.2 package from qemu-0.8.2-i486-1gds.tgz
KQEmu 1.3.0 pre9
- compiled from source from kqemu-1.3.0pre9.tar.gz
VMWare Player 1.0.3 build-34682
- installed from VMWare-player-1.0.3-34682.tar.gz

Since Slackware doesn't have SysVinit, before installing vmplayer I created directory /opt/vmware

and subdirectories rc0.d, rc1.d, rc2.d, rc3.d, rc4.d, rc5.d, rc6.d.

When wmplayer installer asked, I gave it /opt/vmware directory.

I aslo installed vmware-tools. I extracted the .iso file from vmware-server package,
and installed it inside guest system.

Guest OS is Windows 2000 Pro.

Test1: QEmu

- Loaded kqemu module:
# modprobe kqemu
# lsmod | grep kq
kqemu 105604 0

- Created 4G image for guest system
$ qemu-img create -f qcow c.img 4G
Formating 'c.img', fmt=qcow, size=4194304 kB

I'm not sure this was really needed, but it complained, so:
# echo 1024 > /proc/sys/dev/rtc/max-user-freq

Win2k is installed like this:
$ qemu -cdrom ../install/windows/win2000server/win2k.iso -hda c.img -m 256 -boot d -localtime

Test2: VMPlayer

With VMPlayer I created image with qemu-img and created a small .vmx file:
# /opt/vmware/vmware start
$ qemu-img create -f vmdk win2k.vmdk 4G
$ vmplayer win2k.vmx

I had to disable sound and network while installing, otherwise it would get stuck at some point.

Running the installed system:
$ qemu -hda c.img -m 256 -localtime -kernel-kqemu
$ vmplayer win2.vmx

---- Benchmark ----------------

I did ./configure of wxWidgets 2.8.0rc1

On each test I freshly unpacked the archive and ran:
$ time -p ./configure

I also rebooted the machine to make sure VMWare and QEmu don't interfere with each other.

Host system:

QEmu (kqemu module loaded):

QEmu with -kernel-kqemu:


As you can see, GCC in virtual machine performs 10x slower than on real computer. I really like VM technology and it has good uses for testing and QA, but I really don't understand people using it in production. Hardware is cheaper than ever and with VM you also have a single point of failure - if some hardware component fails, instead of losing one server, you lose all of them.