Linux-KVM: Taking Advantage of Memory Deduplication

Linux-KVM: Taking Advantage of Memory Deduplication

Kernel Samepage Merging (KSM) is essentially active memory deduplication.  What does this means for our KVM guests?  Basically the more similar guests we have running, the more of a memory footprint they share, which means less memory they actually hold.  These free pages can then be reutilized by the host to provide improved i/o through some of the caching that KVM does or by an increased capacity for other guests.

Verify Support for KSM in the Linux Kernel

# grep KSM /boot/config-`uname -r`
CONFIG_KSM=y

View KSM Parameters

# ls /sys/kernel/mm/ksm/
full_scans    pages_sharing  pages_unshared  run
pages_shared  pages_to_scan  pages_volatile  sleep_millisecs

Each file in this directory has a file which contains statistics on how KSM is being used.  If you would like to see if KSM is working check the pages_shared, any value higher than zero indicates that it is working.

View Efficacy of KSM

# cat /sys/kernel/mm/ksm/pages_shared
60887
# cat /sys/kernel/mm/ksm/pages_sharing
835511
# cat /sys/kernel/mm/ksm/pages_unshared
124818

On my machine I am sharing 60887 unique pages between 835511 pages with only 124818 pages that cannot be shared at this particular moment.  With 4KB per page this means I have 237MB of unique pages which are being shared to eliminate the need for 3.2GB of RAM, while only having 487MB of unshared memory.  Which isn’t bad considering this is a very small host which only runs two VMs with 2GB of RAM each.