KSM

# 在 Host 启用
echo 1 > /sys/kernel/mm/ksm/run
# 在宿主机上查看 KSM 状态
# 如果有合并则 pages_shared 不为 0
grep . /sys/kernel/mm/ksm/*
# 页大小,默认 4k
getconf PAGE_SIZE
# 实际节省 page
echo $(($(sysctl -n /sys/kernel/mm/ksm/pages_sharing) - $(sysctl -n /sys/kernel/mm/ksm/pages_shared)))
# 节省内存
# numfmt 由 coreutils 提供
echo $(( ($(cat /sys/kernel/mm/ksm/pages_sharing) - $(cat /sys/kernel/mm/ksm/pages_shared)) * $(getconf PAGE_SIZE) )) | numfmt --to=iec-i
echo $(( $(cat /sys/kernel/mm/ksm/pages_sharing) * $(getconf PAGE_SIZE) )) | numfmt --to=iec-i
echo $(( $(cat /sys/kernel/mm/ksm/pages_volatile) * $(getconf PAGE_SIZE) )) | numfmt --to=iec-i
echo $(( $(cat /sys/kernel/mm/ksm/pages_unshared) * $(getconf PAGE_SIZE) )) | numfmt --to=iec-i
itemdesc
pages_shared合并后页
pages_sharing实际页
pages_unshared未能合并页
pages_volatile变化太快未能放到树中跟踪
full_scans所有可合并区域扫描次数
  • pages_sharing 高意味着效果较好
  • pages_unshared 高意味着效果不好 - 可考虑关闭
  • max_page_sharing 限制了最多可共享页 - 可调整