QEMU 不保存虚拟机的 CPU 固定

QEMU 不保存虚拟机的 CPU 固定

我在 Rocky Linux 9.1 KVM 虚拟机管理程序下安装了 Windows 10 和 Windows Server 2019 虚拟机。我计划通过此设置进行系统管理练习,并且希望能够同时运行多个虚拟机。

我发现两个 Windows VM 运行都非常慢(基本上无法使用),因此我尝试了一些修复方法提高虚拟机客户机性能。由于 CPU Pinning,Windows Server 2019 现在运行得更好一些,但我现在遇到的问题是 Windows 10 VM 不会保存 CPU Pinning。

这是我的计算机设置的图片。Windows 10 Host,在 Virtualbox 中运行 Rocky Linux KVM,然后在 QEMU 中运行 Windows Server 和 Windows 10。

https://i.stack.imgur.com/aurzp.png

我已经遇到这个问题一个多月了,我尝试过许多事物。

我最初为 Rocky Linux 9.1 VM 分配了 8 个核心,但为了进行故障排除,我现在使用了 10 个核心。对于 Windows Server,我为其分配了 4 个核心并固定了 0 到 3 个核心,并且运行良好。对于 Windows 10,我为其分配了 4 个核心并尝试固定 4 到 7 个核心,但它从未保存过。我尝试过固定不同的核心组合,但无法保存。奇怪的是,如果我将 Windows Server 中使用的相同核心固定到 Windows 10 VM,它确实会保存 CPU 固定。但是,Windows Server 没有任何固定的核心。

https://i.stack.imgur.com/4vIxT.png

为了确保我使用的是正确的核心,这里是 lscpu -e 的输出:

[admin@localhost ~]$ lscpu -e
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE
  0    0      0    0 0:0:0:0          yes
  1    0      0    1 1:1:1:1          yes
  2    0      0    2 2:2:2:2          yes
  3    0      0    3 3:3:3:3          yes
  4    0      0    4 4:4:4:4          yes
  5    0      0    5 5:5:5:5          yes
  6    0      0    6 6:6:6:6          yes
  7    0      0    7 7:7:7:7          yes
  8    0      0    8 8:8:8:8          yes
  9    0      0    9 9:9:9:9          yes

我尝试做的第一件事是安装 VirtIO 驱动程序和 Spice Guest Tools。VirtIO 驱动程序可能有所帮助,但差别几乎不可察觉。Spice Guest Tools 在 RHEL 9 中被删除了,所以我甚至无法使用它。

接下来,我读到文本编辑器可能是保存编辑内容的问题。我从 vim 切换到 nano(编辑了 /etc/environment 并添加了export EDITOR=nano),运行sudo virsh edit win10,固定 CPU 核心,保存,退出,然后检查 XML 配置文件,更改未保存。可以确认不是编辑器的问题,因为它在其他虚拟机上运行良好,并Domain: 'win10' XML configuration edited.在退出后读取。

我读到的另一件事是,sudo virsh edit如果虚拟机正在运行,则不会保存任何更改。我只在虚拟机关闭时编辑虚拟机的 XML,所以这不是原因。

我刚刚发现一件奇怪的事情,那就是我只有在添加 4 个额外核心的情况下才能在 Windows 10 VM 中进行 CPU 固定。如果我只为 VM 分配 4 个核心并固定这 4 个核心,一旦我保存并退出,CPU 固定线就会消失。它看起来像这样:

  <vcpu placement="static">4</vcpu>
  <iothreads>1</iothreads>
  <cputune>
    <emulatorpin cpuset="4"/>
    <iothreadpin iothread="1" cpuset="4"/>
  </cputune>

但是,如果我分配 8 个核心(在已有的 4 个核心之上再分配 4 个核心)并固定 4 个核心,则一旦我保存并退出,我仍然会固定这 4 个核心。它看起来像这样:

  <vcpu placement="static">8</vcpu>
  <iothreads>1</iothreads>
  <cputune>
    <vcpupin vcpu="4" cpuset="4"/>
    <vcpupin vcpu="5" cpuset="5"/>
    <vcpupin vcpu="6" cpuset="6"/>
    <vcpupin vcpu="7" cpuset="7"/>
    <emulatorpin cpuset="4"/>
    <iothreadpin iothread="1" cpuset="4"/>
  </cputune>

上述配置的问题在于虚拟机将使用 8 个核心而不是 4 个核心。如下所示:

https://i.stack.imgur.com/vGxKF.png

我不太确定还能尝试什么。我的目标是让 Windows VM 启动速度快、运行速度足够快,并且不会持续达到 100% 的 CPU 使用率。我使用 .raw 映像而不是 .qcow2 创建了一个单独的 Windows 10 VM,我认为这样速度会快一点。

我尝试包含尽可能多的细节。如果您需要任何其他信息,请告诉我,我会更新我的帖子。

相关内容