Windows系统在kvm环境下运行,以libvirt和qemu的hypervisor层角度看是不区分客户机操作系统是Linux还是Windows,但实际运行来看性能相差较大,本文从以下几个方面进行分析并提供优化方案。

  • virtio
    虚机默认使用的驱动是virtio驱动,Windows中的磁盘网卡也都是使用virtio驱动,网卡需要从hypervisor层做网卡类型的转换,如vhost,vhost_user等。磁盘在virtio驱动下需要注意的是virtio版本对Windows虚机磁盘读写性能的影响,最新版本virtio-win-0.1.118.iso已经解决此问题,所以尽量取最新的版本使用,对磁盘性能测试如下:
    virtio-102版本磁盘性能
    可以看到平均速度为36.2M/s左右
    virtio-118版本磁盘性能
    平均速度为75.4M/s,性能提升一半左右。

  • 绑核、巨页
    绑核和使用巨页内存是虚拟化较为通用的优化方式,windows和linux都适用,巨页提升内存性能,绑核增强计算能力,如果多虚机并发也可先进行物理机的核隔离,然后再绑核,这里不做过多描述。

  • kvm_intel内核模块选项设置
    enable_apicv,是kvm_intel内核模块的两个参数,apic是时钟相关,可以提升虚机性能,apicv这个参数的优化方向:
    apic原理图
    这是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虚机的性能提升。


小笨驴在吃草的时候创建了微信公众号,为方便更多觅食的“小笨驴”,为大家准备了大量的免费基础教学资料以及技术解决方案,还会定时发布一些好的技术文章,当然也会扯扯蛋、谈谈人生、呵呵,希望我们这群乐于分享技术的“小笨驴”团队越来越大!


这里写图片描述

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:23 天前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐