Windows系统在kvm环境下运行,以libvirt和qemu的hypervisor层角度看是不区分客户机操作系统是Linux还是Windows,但实际运行来看性能相差较大,本文从以下几个方面进行分析并提供优化方案。
virtio
虚机默认使用的驱动是virtio驱动,Windows中的磁盘网卡也都是使用virtio驱动,网卡需要从hypervisor层做网卡类型的转换,如vhost,vhost_user等。磁盘在virtio驱动下需要注意的是virtio版本对Windows虚机磁盘读写性能的影响,最新版本virtio-win-0.1.118.iso已经解决此问题,所以尽量取最新的版本使用,对磁盘性能测试如下:
可以看到平均速度为36.2M/s左右
平均速度为75.4M/s,性能提升一半左右。绑核、巨页
绑核和使用巨页内存是虚拟化较为通用的优化方式,windows和linux都适用,巨页提升内存性能,绑核增强计算能力,如果多虚机并发也可先进行物理机的核隔离,然后再绑核,这里不做过多描述。kvm_intel内核模块选项设置
enable_apicv,是kvm_intel内核模块的两个参数,apic是时钟相关,可以提升虚机性能,apicv这个参数的优化方向:
这是Intel官网上的一张关于apicv性能研究的示意图,具体原理是通过硬件cpu的在硬件层模拟出虚机的apic相关的动作,这样大量减少了vmexit的次数,了解虚拟化原理的应该知道,每次vmexit要进行上下文切换等,性能消耗很大,所以当虚机发生中断请求时通过apicv来减少vmexit的次数,这样可提升虚拟机的整体性能。但apicv需要物理cpu的支持,Intel(R) Xeon(R) E5-2600 V2 Product Family及以后的处理器,可通过重新加载kvm模块来使能该选项。Intel原文连接
在用户态配合apicv的配置在虚机的xml中增加如下配置:
<features>
<hyperv>
<relaxed state='on'/>
</hyperv>
</features>
<clock offset='localtime'>
<timer name='hypervclock' present='yes'/>
</clock>
然后创建虚机即可。
- 更换Windows操作系统
Windows系统在win8之后做了改进,作为虚机系统使用时能够配合kvm来提升虚机性能,主要是减少vmexit的次数,所以建议使用win8之后windows系统作为客户机。
以上为本文提供的Windows虚机性能优化,其中2.3项也适用于Linux虚机的性能提升。
小笨驴在吃草的时候创建了微信公众号,为方便更多觅食的“小笨驴”,为大家准备了大量的免费基础教学资料以及技术解决方案,还会定时发布一些好的技术文章,当然也会扯扯蛋、谈谈人生、呵呵,希望我们这群乐于分享技术的“小笨驴”团队越来越大!