kvm内存优化--KSM
一、KSM(Kernel SamePage Merging)
1、KSM简介
KSM允许内核在多个进程(包括虚拟机)之间共享完全相同的内存页,KSM让内核扫描检查正在运行中的程序并且比较他们的内存,若发现相同的内存页,就将相同的内存页合并成单一的内存页,标识为“写时复制”。
如果有进程试图去修改被标识为“写时复制”的合并的内存页时,就为该进程复制出一个新的内存页供其使用。
2、KSM提高内存的速度和使用效率
(1)相同的内存页被合并,减少了虚拟机的内存使用量,内存中的内容更容易被保存到CPU的缓存中。
(2)通过减少每个虚拟机实际占用的内存数量,让多个虚拟机占用的总内存之和大于物理内存,实现“内存过载”。
3、KSM劣势
(1)消耗一定的资源用于内存扫描,加重CPU的消耗。
(2)虚拟机由于修改被KSM合并的内存页,从而这些被修改的内存重新被复制出来占用内存空间,造成内存不足,从而使用swap分区。因此内存不足时,频繁使用swap交互,虚拟机性能下降。
二、KSM服务
KSM主要有两个服务:ksm和ksmtuned。
1、配置和监控ksm
ksm的配置文件:/sys/kernel/mm/ksm/*
full_scans:已经对所有可合并的内存区域扫描过的次数。
pages_shared:正在使用中的共享内存页数量
pages_sharing:有多少内存页正在使用被合并的共享页,不包括合并内存页本身。这是实际节省的内存页数量。
pages_to_scan:在ksmd进程休眠之前会去扫描的内存页的数量。
pages_unshared:无重复内容而不可以被合并的内存页数量。
pages_volatile:因为内容很容易变化而不被合并的内存页数量。
run:控制ksmd是否运行。0:停止运行但是保存合并的内存页;1:马上运行ksmd;2:停止运行,并且分立已经合并的所有内存页。
sleep_millisecs:ksmd进程的休眠时间。
其中pages_to_scan、sleep_millisecs、run三个文件是可读写的,其他文件是只读的。
2、配置和使用ksmtuned
配置文件:/etc/ksmtuned.conf
ksmtuned会一直保持循环执行,以调节ksm服务运行
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?