ksmd 占用太多 CPU 资源问题

Feb 22, 2023

在一台 Centos 7.5 服务上运行了4台kvm, 发现ksmd的CPU占用时间最大, 占用比一直处于30%-50%左右

[root@dlz-192-168-1-82 data]# top
top - 11:18:08 up 4 days, 14:51, 1 user, load average: 1.52, 1.51, 1.50
Tasks: 150 total, 2 running, 148 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.4 us, 12.4 sy, 0.0 ni, 86.1 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 16094264 total, 395088 free, 12852328 used, 2846848 buff/cache
KiB Swap: 8388604 total, 8368792 free, 19812 used. 2900168 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
46 root 25 5 0 0 0 R 50.3 0.0 412:40.75 ksmd
1844 qemu 20 0 5027028 4.0g 3416 S 6.0 26.1 205:22.28 qemu-kvm
1811 qemu 20 0 5028052 4.0g 3396 S 2.0 26.0 128:51.29 qemu-kvm
1888 qemu 20 0 5034204 4.1g 3456 S 0.7 27.0 44:57.39 qemu-kvm
12608 qemu 20 0 5033176 3.7g 3392 S 0.7 24.0 33:18.73 qemu-kvm

ksm是基于内核的虚拟机KVM用来自调优的, 通过调整一些参数使KVM主机获得更好的性能. 通过使用kms, 可以使虚拟机获得更多的内存启动, 简而言之, 可以超过宿主机内存限制, 过度分配内存. 但使用ksm会带来性能损失, 一般情况会损失10%.

在RHEL 6+(Centos 6+)和Fedora 16+中, ksm默认打开. ksm通过ksmd和ksmtuned两个服务实现.

是否要使用ksm

关闭ksm

chkconfig ksmd off
chkconfig ksmtuned off
service ksmd off
service ksmtuned off

调优ksm

/etc/ksmtuned.conf 是ksm的配置文件, 我们可以适当的进行一些参数调整, 重启服务

# Configuration file for ksmtuned.
# How long ksmtuned should sleep between tuning adjustments
# KSM_MONITOR_INTERVAL=60
KSM_MONITOR_INTERVAL=480
# Millisecond sleep between ksm scans for 16Gb server.
# Smaller servers sleep more, bigger sleep less.
# KSM_SLEEP_MSEC=10
KSM_SLEEP_MSEC=50
# KSM_NPAGES_BOOST=300
# KSM_NPAGES_DECAY=-50
# KSM_NPAGES_MIN=64
# KSM_NPAGES_MAX=1250
KSM_NPAGES_MAX=256
# KSM_THRES_COEF=20
# KSM_THRES_CONST=2048
KSM_THRES_CONST=1024
# uncomment the following if you want ksmtuned debug info
# LOGFILE=/var/log/ksmtuned
# DEBUG=1