Skip to main content

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
itemdescdefault
pages_shared合并后页
pages_sharing实际页
pages_unshared未能合并页
pages_volatile变化太快未能放到树中跟踪
full_scans全扫描次数
max_page_sharing最多共享次数256
pages_to_scan一次 sleep 扫描多少页100
sleep_millisecs扫描间隔20
run0 stop keep merged, 1 run, 2 stop & unmerge
  • pages_sharing 高意味着效果较好
  • pages_unshared 高意味着效果不好 - 可考虑关闭
  • max_page_sharing 限制了最多可共享页 - 可调整