KSM与KVM CPU、内存控制
今天在登陆一台KVM物理机时,发现进程ksmd竟然占用50%以上的cpu,较之单个qemu-kvm进程占用的cpu还大 。由于对该进程做什么用的不甚了解。所以不敢贸然将其kill掉 。具体什么是KSM呢 ?
ksm是基于内核的虚拟机(KVM)被设计为自调优,但是可以调整一些参数使KVM主机性能更好。最重要的参数是内核同页合并(kernel samepage merging ,KSM),这一特性允许内核更有效地处理内存。KSM允许Linux内核识别出包含相同内容的内存页,然后合并这些内存页,将数据整合在一个位置可以多次引用。
如果在主机上使用KVM,通常会激活数个客户操作系统,而且这些操作系统经常运行相同的OS,这意味着大量的内核页面被多次加载。通过应用KSM,许多虚拟机可以使用相同数量的内存启动。事实上,KSM允许虚拟机过度分配内存。但是使用KSM存在性能损失,在一般的环境中,性能损失大概是10%,这也是在某些环境中关闭KSM的原因。 在RHEL 6(CentOS 6)和Fedora 16中,KSM默认是打开的。KSM通过两个服务:ksmd和ksmtuned实现,这两个服务在系统初始化时自动启动。管理员应该判断他们的环境并决定保持KSM处于运行状态还是关闭它。
在具体的环境中是否要使用ksm呢?
如果目标是运行尽可能多的虚拟机,而且性能不是问题,应该保持KSM处于运行状态。例如KSM允许运行30个虚拟机的主机上运行40个虚拟机,这意味着最大化硬件使用效率。但是,如果服务器在运行相对较少的虚拟机并且性能是个问题时,那么应该关闭KSM。
对任何系统来说,最佳选择将取决于创建虚拟环境时的内存估算。如果在虚拟主机中有足够的物理内存,在没有开启KSM时就能够满足虚拟机的内存需求,那么最好关闭KSM。关闭的方法如下:
1chkconfig ksmd off
2chkconfig ksmtuned off
3service ksmd off
4service ksmtuned off
注:如果主机内存紧张,那么最好保持KSM处于运行状态。
即然上面对ksm的作用进行了了解,那么如何在使用ksm时进行调优呢?
ksm的参数可以在/etc/ksmtuned.conf文件中调整。其默认参数如下:
1$cat ksmtuned.conf
2# Configuration file for ksmtuned.
3# How long ksmtuned should sleep between tuning adjustments
4# KSM_MONITOR_INTERVAL=60
5# Millisecond sleep between ksm scans for 16Gb server.
6# Smaller servers sleep more, bigger sleep less.
7# KSM_SLEEP_MSEC=10
8# KSM_NPAGES_BOOST=300
9# KSM_NPAGES_DECAY=-50
10# KSM_NPAGES_MIN=64
11# KSM_NPAGES_MAX=1250
12# KSM_THRES_COEF=20
13# KSM_THRES_CONST=2048
14# uncomment the following if you want ksmtuned debug info
15# LOGFILE=/var/log/ksmtuned
16# DEBUG=1
如果你想获取优化KSM的调试信息,取消以下注释:
1# LOGFILE=/var/log/ksmtuned
2# DEBUG=1
配置文件中最重要的参数是KSM_SLEEP_MSEC。Fedora 16使用的默认值是大型服务器的设置值。当在主机上运行较少的虚拟机,使用KSM时最好让主机休眠更长的时间。例如,尝试设置KSM_SLEEP_MSEC=50,然后测试对虚拟机的影响。
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/ksm-cpu-kvm/2756.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.