* Optionally turn on the ksmtuned service which dynamically controls ksm in response to what is happening on the host at any given time with <code> chkconfig ksmtuned on </code>

== User Experience ==

== User Experience ==

+

+

Users running multiple, but similar, KVM guests should experience a reduction in memory usage when KSM is enabled.

+

+

Fedora's kvm comes with 2 services controlling the behavior of ksm. One, simply called ksm, is just a nice means to start and stop ksm's kernel thread. The other, called ksmtuned, controls the first service and tunes

+

its parameters according to the memory stress that is generated by KVM virtual machines. ksmtuned may

+

stop ksm service altogether, if memory is not in need. Later, if ksmtuned senses that memory stress has risen, it will fire up ksm again.

== Dependencies ==

== Dependencies ==

Line 56:

Line 65:

== Contingency Plan ==

== Contingency Plan ==

+

None needed, if KSM is not implemented guests will still work as they do now, without the advantage of a reduced memory footprint.

Fedora 12 adds KSM (Kernel SamePage Merging) which allows identical memory pages to be merged by the kernel into a single page. This is initially used by KVM to allow multiple, but similar, guest virtual machines to have a reduced memory footprint. To enable KSM, it is recommended that you turn on the ksm service with 'sudo chkconfig ksm on' to set up limits appropriate for your system. For additional tuning with a large number of guests, the ksmtuned service can be enabled with 'sudo chkconfig ksmtuned on'.

Allow KVM guest virtual machines to share identical memory pages. This is especially useful when running multiple guests from the same or similar base operating system image. Because memory is shared, the combined memory usage of the guests is reduced.

The concept of shared memory is very common in operating system design. For example, when a program is first started it shares all of its memory with the parent program. When either the child or parent program tries to modify some of this memory the kernel allocates a new memory region, copies the original contents and allows the program to modify this new region. This is known as copy on write.

KSM is a new Linux feature which turns this concept on its head. It enables the kernel to look at two already running programs and compare their memory. If any memory regions are exactly identical, the kernel can combine the two regions into one and mark those regions for copy on write as above.

This is especially useful in the case of KVM. When guest virtual machines are started, they can only inherit the memory of the parent qemu-kvm process. However, it is the contents of the guest operating system image which has the data which is most likely to be shareable. KSM allows KVM to request that these identical guest memory regions be shared.

With this feature Fedora will be able to run guest virtual machines in a potentially much more memory efficient manner. This will mean that Fedora host machines will be capable of hosting more guests than before.

The main effort here is the kernel support. Since it is not going to make 2.6.31, we need to consider backporting it once the userspace API has been declared stable. KSM is a pretty well self-contained memory management feature, so backporting should be straightforward.

Once the kernel support is available, a minor patch for qemu-kvm is required to enable the memory sharing.

An open question is whether KSM will be enabled for all guests by default. If not, support for enabling it will need to be added to libvirt, virtinst, virt-manager etc.

Users running multiple, but similar, KVM guests should experience a reduction in memory usage when KSM is enabled.

Fedora's kvm comes with 2 services controlling the behavior of ksm. One, simply called ksm, is just a nice means to start and stop ksm's kernel thread. The other, called ksmtuned, controls the first service and tunes
its parameters according to the memory stress that is generated by KVM virtual machines. ksmtuned may
stop ksm service altogether, if memory is not in need. Later, if ksmtuned senses that memory stress has risen, it will fire up ksm again.

Fedora 12 adds KSM (Kernel SamePage Merging) which allows identical memory pages to be merged by the kernel into a single page. This is initially used by KVM to allow multiple, but similar, guest virtual machines to have a reduced memory footprint. To enable KSM, it is recommended that you turn on the ksm service with 'sudo chkconfig ksm on' to set up limits appropriate for your system. For additional tuning with a large number of guests, the ksmtuned service can be enabled with 'sudo chkconfig ksmtuned on'.