一、KVM为什么要调优
性能的损耗是矛盾的根源,KVM采用全虚拟化技术,全虚拟化要由一个软件来模拟硬件层,故有一定的损耗,特别是I/O输入输出。
KVM性能优化主要在CPU、内存、I/O这几方面,当然在这几方面也是要分场景的,不同场景优化方向也是不同的。
二、KVM优化思路及步骤 1、CPU优化要考虑CPU的数量问题,所有guestcpu的总数目不要超过物理机CPU总数目,如果超过,则将对性能带来严重影响,建议选择复制主机CPU配置。
2、内存优化 (1)KSM---kernel Samepage Merging 相同页合并内存分配的最小单位是page(页面),默认大小是4KB,可以将host主机内容相同的内存合并,以节省内存的使用。
当KVM上运行许多相同系统的客户机时,客户机之间将有很多内存页是完全相同的,特别是只读的内核代码页完全可以在客户机之间共享,从而减少客户机占用的内存资源,也能同时运行更多的客户机。
ll //sys/kernel/mm/ksm/
查看KSM是否开启
cat run
[root@bogon ksm]# cat run //是否开启KSM,0为关闭,1为开启 0 [root@bogon ksm]# echo 1 > run //临时开启KSM,只能使用重定向,不支持VI编辑器 //若想永久开启,可在/etc/rc.local中添加echo 1 > /sys/kernel/mm/ksm/run,让KSM开机自动运行 [root@bogon ksm]# cat pages_to_scan //定期扫描相同页,sleep_millisecs决定多长时间 //pages_to_scan决定每次查看多少个页面 //默认是100,越大越好,超过2000无效,需要开启两个服务ksmtuned和tuned,支持更多页面 (2)对内存设置限制如果我们有多个虚拟机,为了防止某个虚拟机无节制的使用内存资源,导致其他虚拟机无法正常使用,就需要对使用的内存进行限制。
virsh memtune c7-1 //查看当前虚拟机的内存限制,单位为KB
hard_limit : 无限制 //强制最大内存 soft_limit : 无限制 //可用最大内存 swap_hard_limit: 无限制 //强制最大swap使用大小设置强制最大内存为100MB,在线生效。
virsh memtune c7-1 --hard-limit 1024000 --live
3、大页后端内存
在逻辑地址想物理地址转换时,CPU保持一个翻译后备缓冲器TLB,用来缓冲转换结果,而TLB容量很小,所以如果page很小,TLB很容易就充满,这样就容易导致cache miss,相反page变大,TLB需要保存的缓存项就变少,就会减少cache miss,通过为客户端提供大页后端内存,就能减少客户机消耗的内存并提高TLB命中率,从而提高KVM性能。
查看内存信息,无可用大页
cat /proc/meminfo
HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0指定大页需要的内存页面数量
echo 25000 > /proc/sys/vm/nr_hugepages //临时生效
永久生效
sysctl -w vm.nr_hugepages=25000 或者 vim /etc/sysctl.conf vm.nr_hugepages=25000 //添加行,执行sysctl -p 立即生效关闭虚拟机,编辑虚拟机XML配置文件使用大页来分配内存。
virsh destroy c7-1
vim /etc/libvirt/qemu/c7-1.xml
重启KVM服务,打开虚拟机,查看大页内存是否生效。
systemctl restart libvirtd.service
virsh start c7-1
cat /proc/meminfo | grep HugePage
关闭虚拟机,再查看大页内存是否有变化。
4、I/O优化