如何优化Windows虚拟机性能(KVM/QEMU)

1.背景:

最近自己在家搭建了一个局域网的云桌面,起中host端的虚拟化方案用的是kvm+qemu,在搭建过程中有很多心得,特别是关于如何优化windows虚拟机的性能在KVM/QEMU平台下.

如果你想你的win10,win11虚拟机接近裸金属的体验,那么必须针对kvm+qemu做一系列的特殊化调整,不然可能会遇到卡顿,cpu使用率高,中断和I/O缓慢的情况.

下面我们会从CPU,IO,GPU角度一步一步的介绍如何优化Windows 虚拟机的性能,本文仅仅会介绍如何优化虚拟机性能,并不会讲解kvm+qemu原理以及代码逻辑.如果读者对这一块赶兴趣,小编后续会写一系列文章,带着大家一起动手调试qemu,玩转qemu.

2. 虚拟机的CPU优化

2.1 cpu的模式和拓扑结构

你选择的CPU模式将会是影响CPU相关性能的最大因素之一,如果我们禁用所有CPU模拟并使用"主机直通"模式将cpu按原样传递给虚拟机,那么您的性能将与cpu密集型任务一样接近裸金属.所以在配置CPU时候,我们尽量指定的CPU核心透传给虚拟机.

对于虚拟机拓扑结构配置来说, 拓扑结构的socket和thread必须和你物理机CPU一一对应.(有关socket的解释请看链接https://en.wikipedia.org/wiki/CPU_socket)

通常来说,消费级主板通常只有一个CPU芯片和socket, 这种情况我们只需要修改 kvm-vm.xml socket 和 dies 属性为1即可,threads将取决于 CPU 型号,并指定 CPU 的每个物理核心有多少个虚拟核心。

那么配置虚拟机核心数是由什么配置的呢,答案是虚拟机的核心数量是使用 cores 属性配置的。您想要传递给虚拟机的核心总数等于物理核心数量乘以(核心)每个核心的虚拟核心(线程)数量(核心 X 线程)。


...



...

如果按照上面这样配置,那么kvm/qemu就会给虚拟机创建一个拥有14个核心的CPU. 但是为了CPU隔离,你还需要将vcpu tag设置成14(关于CPU隔离在后面的文章中会提到).

2.2 CPU Pinning(绑定)

提高性能最简单、最重要的方法是将 CPU 绑定与主机直通 CPU 模式结合使用, 通过在调优kvm/qemu过程中,我们会绑定一些核心用于专用的虚拟机进程(如I/O),一些用于host主机上的程序比如libvirt ui程序, 剩余的核心则专用于虚拟机.

如果你想指定io thread数量, 你可以在使用iothreads tag来配置, 单单一个io线程已经足够有效了,当然你可以指定更多,分配给虚拟机的线程也是如此,但您将使用 vcpu 标签来定义虚拟机将拥有的线程数。

假如你的机器由16个逻辑核心,8个物理核心, 那么你可以保留第一个物理核心给host母机使用,其他核心则可以完全用于模拟任务.  因此在配置文件中不会将 vcpu0 和 vcpu8分配给虚拟机.

 至于为什么是vcpu0 和 vcpu8, 因为本文是拿intel cpu举例, intel cpu组以一种特殊的方式编号,每个核心的第一个虚拟核心占据 cpuset 范围的下半部分,第二个虚拟核心占据上半部分。

Physical core #1
- Virtual core 1 = 0
- Virutal core 2 = 8
Physical core #2
- Virtual core 1 = 1
- Virutal core 2 = 9
...
Physical core #8
- Virtual core 1 = 7
- Virtual core 2 = 15

那么剩余核心(2-8)则通过 vcpuin tags分配给虚拟机, 然后把emulator和 io thread 绑定到主机的第一个核心. 具体配置如下:

<

你可能感兴趣的:(linux,服务器,云计算)