首页/云/云平台与虚拟化速查/KSM 内存页合并与取舍
虚拟化基础63 条

KSM 内存页合并与取舍

KSM(Kernel Samepage Merging)扫描并合并相同内容的内存页,提高同质虚机密度;因扫描开销与侧信道顾虑,许多发行版默认关闭。

云平台与虚拟化速查云更新于 2026-10-13

KSM 是什么

KSM(内核同页合并)由内核扫描进程内存中内容相同的页面,合并为一份写时复制页面,让同一宿主上多个同构虚机共享重复的内存内容,从而提升单机内存密度。它本质是用 CPU 与扫描开销换取内存:收益取决于虚机上内存内容的同质程度,多个同版本同应用的虚机效果最好。同宿混部敏感业务时,还要评估内存侧信道与合规要求。

基本信息

开关echo 1 > /sys/kernel/mm/ksm/run
扫描参数pages_to_scan、sleep_millisecs
观察指标pages_sharing / pages_shared / pages_volatile
守护进程ksmtuned(存在时优先用它按负载调节)
风险共享内存带来的侧信道与合规问题需评估

典型使用场景

  • 虚拟桌面或大量同构虚机场景,提升单机承载密度
  • 测试环境里跑多台相同系统的虚机,节省内存
  • 内存紧张但暂时无法扩容时做临时缓解
  • 评估页合并的实际收益,决定是否长期开启
  • 排查同一宿主上虚机内存使用异常时的辅助手段

开启并观察合并效果

开启并观察合并效果
systemctl enable --now ksmtuned    # 优先用守护进程按负载自动调节
echo 1 > /sys/kernel/mm/ksm/run    # 手动开启
echo 0 > /sys/kernel/mm/ksm/run    # 关闭合并
cat /sys/kernel/mm/ksm/pages_sharing   # 当前共享页数,衡量收益
cat /sys/kernel/mm/ksm/pages_to_scan   # 每轮扫描页数
cat /sys/kernel/mm/ksm/sleep_millisecs # 两轮扫描间隔

指标读法

文件含义读法
run是否开启合并1 为开启,0 为关闭
pages_to_scan每轮扫描页数越大收益越快,CPU 开销也越高
sleep_millisecs扫描间隔毫秒越小越激进,CPU 占用上升
pages_sharing被共享出去的页面数持续增长说明同质内容多、收益明显
pages_shared当前用于共享的物理页数结合 pages_sharing 估算节省量
pages_volatile内容频繁变化的页数值高说明合并收益不稳定
同宿混合敏感业务时谨慎开启:内存侧信道共享风险与合规要求需一并评估,安全等级高的场景宁可用充足内存换隔离。
省内存的首选仍是合理规格与内存气球驱动,KSM 只能合并内容相同的页面,对写密集或内容差异大的虚机几乎没有收益。

易错点

  • 把 KSM 当成零成本:扫描消耗 CPU,收益取决于内存同质程度
  • 扫描参数调得过激进,宿主 CPU 明显上升却收益有限
  • 同宿主混部高敏感业务仍开启页合并,带来隔离与合规风险
  • 只看 pages_sharing 增长就认为内存充足,忽略其余不可合并的内存需求

数据来源与参考

  • Linux 内核文档:KSM
  • Red Hat 文档:ksmtuned
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌