qemu全方位优化指南

qemu优化和不优化差距很大,优化好了,几乎和真机一样的体验

本篇文章的每一个章节,铺开了讲,都能写好几章,所以,这里不涉及原理,只提供思路和参考,具体的实践,你还要通过多搜一下才能达到

优化的思路

一个电脑快,到底是什么促成了一个电脑快,首先cpu强大,再内存够用,然后存储的io跟的上,然后网络要快,2d和3d的性能要强劲,总共就这几个方向

  1. cpu强大
  2. 内存够用
  3. 存储io要快
  4. 网络io要快
  5. 图形性能要强大,包括2d和3d的支持

qemu优化

  1. cpu pin
  2. cpu数量优化
  3. 使用huagepages
  4. hyperv相关优化
  5. 安装virtio-win驱动,改善易用性,相当于vmware或者virtualbox的增强工具
  6. 有机后了,如果你一个集显,一个独显,可以显卡passthough,补上虚拟机3d性能的遗憾

cpu优化

cpu pin

cpu pin以后,可以让cpu和线程绑定起来,然后减少上下文切换

这里以我的cpu为例,i5-9600k,总共6个核心,我给他们分配了4个,剩下2个,一个分给了emulatorpin,
一个分给了iothreadpin,实际使用了还是6个核心,具体cpu pin,需要看自己的cpu数量和是否支持超线程来定,
还是比较复杂的,这里给了是一个示例

1
2
3
4
5
6
7
8
9
10
11
12
<domain>
<vcpu placement="static">4</vcpu>
<iothreads>1</iothreads>
<cputune>
<vcpupin vcpu="0" cpuset="0"/>
<vcpupin vcpu="1" cpuset="1"/>
<vcpupin vcpu="2" cpuset="2"/>
<vcpupin vcpu="3" cpuset="3"/>
<emulatorpin cpuset="4"/>
<iothreadpin iothread="1" cpuset="5"/>
</cputune>
</domain>

cpu核心数量确定

1
2
3
4
5
6
<domain>
<cpu mode="host-passthrough" check="none" migratable="on">
<topology sockets="1" dies="1" cores="4" threads="1"/>
<cache mode="passthrough"/>
</cpu>
</domain>

内存优化

使用hugepages,使用连续的内存,同时减少查询的次数

开启1g大页内存,数量为8,grub的增加GRUB_CMDLINE_LINUX_DEFAULT以下内容

1
GRUB_CMDLINE_LINUX_DEFAULT="default_hugepagesz=1G hugepagesz=1G hugepages=8"

挂载分区,/etc/fstab,加以下内容

1
none                                      /mnt/huge      hugetlbfs pagesize=1G,size=8G 0 0

虚拟机配置使用,使用默认的大页内存,我们开了8个1g的大分页,总共8g内存

1
2
3
4
5
<domain>
<memoryBacking>
<hugepages/>
</memoryBacking>
</domain>

io优化

存储类型选择virtIO驱动,网络类型也选择virtIO模式

针对windows的虚拟机优化

这是微软为了提高windows在hyper模式下所做的优化,windows知道自己是作为虚拟机了,主动做的一些优化,qemu也支持

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<domain>
<features>
<hyperv mode="custom">
<vpindex state="on"/>
<runtime state="on"/>
<synic state="on"/>
<stimer state="on">
<direct state="on"/>
</stimer>
<reset state="on"/>
<frequencies state="on"/>
<reenlightenment state="on"/>
</hyperv>
</features>
</domain>

3d性能优化

安装virtio-win里面驱动,里面包含了virtIO的驱动,同时也包含了spice-guest-tools,可以增加一些2d的性能,包含少量的3d性能,如果想要增加3d
性能,只能pcie passthough了,就是直接分配给虚拟机一块显卡,然后虚拟机装上驱动,就可以差不多拥有和真机一样的3d性能,因为此时,已经完整的包含了一张
显卡设备

总结

上面几个看似不起眼的优化,其实每个对性能的提升都是非常巨大的,基本上你按照以上的优化实施以后,虚拟机可以达到真机的水平,尤其是显卡 passthough
以后,虚拟机最后一个3d的短板也被修补上,将会非常流畅

经过这些优化,没错,你的虚拟机可以直接玩3d游戏了(需要显卡passthough),也会不卡