Context
I am running a no-brand machine,
- CentOS 6.3
- 2 cores
- 8GB RAM
- 1 SATA disk
On this I fired 6 virtual machines
- 2 Centos 6, 1GB RAM each
- 4 Windows XP, 2GB RAM each
The reader probably noticed I overbooked RAM: If all the VM will use the available RAM it will fill up to 10GB.
I wanted to test the KSM effect on this. The default KSM settings on this OS is:
KSM_MONITOR_INTERVAL=60
KSM_SLEEP_MSEC=100
KSM_NPAGES_MAX=1500
The result I got is:
- Memory usage fits in RAM (very low swap usage
- Too high CPU usage for scanning "same pages" (constantly using the equivalent of 70% of 1 core)
- Disk IO is reasonnable, but on the other hand load average is high (10)
- The Windows XP VM are desperately slow (not a surprise)
Tuning
Before tuning, I collected what ressource I could use more
- This machine can bear more disk IO: I can use swap and RAM a bit more
- This weak CPU should be a bit more used by VMs instead of KSM
My fisrt idea is to make KSM check less often. This is my new KSM setting:
KSM_MONITOR_INTERVAL=600
KSM_SLEEP_MSEC=1000
KSM_NPAGES_MAX=5000
The result is:
- Less load average (now 6)
- Less CPU used (now about 40% of 1 core)
- More swap used, but IO statistics are still OK (IO Wait, IO throughput)
I'll still wait for users feedback before sticking to this setting (or not).