[zz]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.
For a technical discussion of this option, see this link . If you want a more detailed discussion see this second link.
Grub 2
Using any editor, open /etc/default/grub
sudo -e /etc/default/grub
Look for the line :
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
Add elevator=noop at the end of the line
GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash elevator=noop”
Save your changes and exit your editor.
update grub
sudo update-grub
Reboot – One of the few times you will need to reboot.
Grub 1
With most distros you edit /boot/grub/menu.lst
Using any editor, open Using any editor, open /boot/grub/menu.lst
Look for the kopts line:
# kopt=root=/dev/sda1 ro
Just add this option to the end of the line.
# kopt=root=/dev/sda1 ro elevator=noop
Note: DO NOT remove the # in the front of the line !!!
Then update grub
sudo update-grub
Reboot – One of the few times you will need to reboot.
Fedora is an exception
Fedora is a bit odd about this. Fedora uses /boot/grub/grub.conf , and /boot/grub/menu.lst is a symbolic link to grub.conf .
Specify the noop kernel option at installation
You may specify grub options at installation : Fedora Wiki Installation Options
Adding the noop kernel option post installation
As far as I can see, this is a manual edit. You will need to manually edit the file /etc/grub/grub.conf and add elevator=noop to the end of the kernel line.
Save your changes and reboot – One of the few times you will need to reboot.
Cache writeback option
Ibuclaw pointed this option out to me on IRC, and discusses in ibuclaw’s blog.
From man qemu :
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.
See This KVM page from the Arch Wiki.
For a more detailed description of KSM see IBM – Anatomy of Linux Kernel Shared Memory.