Improve KVM performance

In this post I would like to share two tips I have found that greatly improve the performance of KVM guests. Both tips work with Linux guests, although only the second tip will work with windows or BSD guests.

With these tips you should notice an immediate improvement in performance including boot times, general performance, and responsiveness to inputs (mouse / keyboard).

Kernel option noop

With this tip we will use the kernel (boot) option elevator=noop to optimize your virtual hard drive I/O.

Cache writeback option

By default, writethrough caching is used for all block device.
This means that the host page cache will be used to read and write
data but write notification will be sent to the guest only when the
data has been reported as written by the storage subsystem.

Writeback caching will report data writes as completed as soon as
the data is present in the host page cache. This is safe as long
as you trust your host. If your host crashes or loses power, then
the guest may experience data corruption. When using the -snapshot
option, writeback caching is used by default.

The host page can be avoided entirely with cache=none. This will
attempt to do disk IO directly to the guests memory. QEMU may
still perform an internal copy of the data.

Some block drivers perform badly with cache=writethrough, most
notably, qcow2. If performance is more important than correctness,
cache=writeback should be used with qcow2. By default, if no
explicit caching is specified for a qcow2 disk image,
cache=writeback will be used. For all other disk types,
cache=writethrough is the default.

So either using writeback or disabling the cache will improve performance.

To use this option, rather then specifying a drive with -hda image.qcow we need to use the -drive option

kvm -m 512 -drive file=image.qcow,cache=writeback,media=disk

This option can be used with .iso as well ( note the media=cdrom )

kvm -m 512 -drive file=fedora.iso,cache=writeback,media=cdrom

Warning: Please note that in the event the host node crashes, data loss can result from this option.

KSM

This tip was added by morgan cox (see comments). KSM == Kernel SamePage Merging and was enabled by default on Fedora 12.