收起左侧

开启KSM内存去重技术,大幅度降低多个虚拟机内存实际占用宿主机

0
回复
19
查看
[ 复制链接 ]

如需更好的阅读模式,可点击这里前往我的博客

ChatGPTImage2026年5月4日21_07_26.png

KSM内存去重技术可以查看这篇文章 (33 封私信 / 88 条消息) 一篇搞懂KSM机制剖析 — Linux内核中的内存去耦合 - 知乎

总之他在虚拟化场景具有非常高的利用价值,可以说是完全给虚拟化场景量身打造的,尤其是多个VM运行同一OS的时候内存几乎能实现只占用一个虚拟机的多一点。

唯一缺点就是会有CPU开销,由于需要经常扫描内存,所以开启这项技术你的CPU利用率可能不会一直是0%,内存越大开销就越大。

由于是合并内存也必须是相同的内存也所以只有通过克隆尤其是链式克隆的虚拟机有非常大的合并率和效果,亲测如果通过链式克隆的虚拟机可以实现12G虚拟机内存合并到只有2G占用,非常的离谱!非常的夸张!非常的好用!效果如下。

链式克隆虚拟机,实现一秒开十台,每台虚拟机占用不到100MB!

未开启之前

image.png

开启之后(激进)

image.png

开启方法(临时)

启动 KSM

echo 1 > /sys/kernel/mm/ksm/run

配置去重参数(经过我亲自测试的)

bash -c '
echo 500 > /sys/kernel/mm/ksm/pages_to_scan
echo 50 > /sys/kernel/mm/ksm/sleep_millisecs
echo 1 > /sys/kernel/mm/ksm/merge_across_nodes
echo 1 > /sys/kernel/mm/ksm/use_zero_pages
echo 0 > /sys/kernel/mm/ksm/smart_scan
'

echo 500 > /sys/kernel/mm/ksm/pages_to_scan # ✔ 扫描强度
echo 50 > /sys/kernel/mm/ksm/sleep_millisecs # ✔ 扫描间隔
echo 1 > /sys/kernel/mm/ksm/merge_across_nodes # ✔ 开启跨NUMA
echo 1 > /sys/kernel/mm/ksm/use_zero_pages # ✔ 开启 zero page
echo 1 > /sys/kernel/mm/ksm/smart_scan # ✔ 开启 smart_scan

其中尤其是smart_scan参数 关闭后可以跳过之前没命中的页效果非常明显

如果发现内存始终还是没有降低那么就再输入下面命令

echo 2000 > /sys/kernel/mm/ksm/pages_to_scan
echo 10 > /sys/kernel/mm/ksm/sleep_millisecs
echo 0 > /sys/kernel/mm/ksm/smart_scan

这个参数更加的激进,一般10-30秒就能立竿见影。

image.png

开启方法(永久)

设置启动脚本

cat > /usr/local/bin/ksm-tune.sh <<'EOF'
#!/bin/bash
set -e

# 先停再调(避免卡住)
echo 0 > /sys/kernel/mm/ksm/run

echo 2000 > /sys/kernel/mm/ksm/pages_to_scan
echo 10 > /sys/kernel/mm/ksm/sleep_millisecs
echo 1 > /sys/kernel/mm/ksm/merge_across_nodes
echo 1 > /sys/kernel/mm/ksm/use_zero_pages
echo 0 > /sys/kernel/mm/ksm/smart_scan

# 最后开启
echo 1 > /sys/kernel/mm/ksm/run
EOF

chmod +x /usr/local/bin/ksm-tune.sh

设置开机启动服务

cat > /etc/systemd/system/ksm-tune.service <<'EOF'
[Unit]
Description=KSM Aggressive Tune
After=local-fs.target
ConditionPathExists=/sys/kernel/mm/ksm/run

[Service]
Type=oneshot
ExecStart=/usr/local/bin/ksm-tune.sh
RemainAfterExit=yes
TimeoutStartSec=10

[Install]
WantedBy=default.target
EOF

启动服务

systemctl daemon-reload
systemctl enable ksm-tune
systemctl start ksm-tune --no-block

这样每次飞牛重启开机立即开启虚拟机后10秒左右内存就开始大幅度下降 超级爽!

收藏
送赞
分享

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
https://www.xiaozhuhouses.asia/欢迎访问我的博客
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则