libvirt 实际上是否为 VM 实时分配 CPU 核心?

libvirt 实际上是否为 VM 实时分配 CPU 核心?

我在 Ubuntu 20.04.4 LTS 上使用 libvirt 版本 6.0.0 来管理我的 KVM VM。我想使用 virsh CLI 更改 VM 的内核数量。我发现使用virsh setvcpus VM_name number_of_core --live它可以做到这一点。以下是我从主机操作系统获得的输出。

步骤 1. 我启动了 1 核的虚拟机。这是虚拟机的 vcpu 信息。

host$ virsh vcpuinfo ubuntu_18_04_guest4
VCPU:           0
CPU:            14
State:          running
CPU time:       25.8s
CPU Affinity:   yyyyyyyyyyyyyyyy
  1. 我将虚拟机的核心数从 1 核更改为 2 核。
host$ virsh setvcpus ubuntu_18_04_guest4 2 --live
  1. 我检查虚拟机的核心数
host$ virsh vcpuinfo ubuntu_18_04_guest4
VCPU:           0
CPU:            2
State:          running
CPU time:       65.5s
CPU Affinity:   yyyyyyyyyyyyyyyy

VCPU:           1
CPU:            0
State:          running
CPU Affinity:   yyyyyyyyyyyyyyyy

在主机端,它看起来运行正常。现在,我要转到客户操作系统端。这是虚拟机首次以 1 个核心启动时的输出。 在此处输入图片描述

如我们所见,有 1 个核心,因为我们以 1 个核心启动了虚拟机。现在,我附上将核心数增加到 2 个后的屏幕截图。 在此处输入图片描述

正如我们所见,虽然我在主机端看到了这种增加,但我在客户机端没有看到这种增加。我现在重新启动虚拟机。

guest$ sudo reboot

重新启动虚拟机后,我附加了 htop 输出。 在此处输入图片描述

现在之前分配的 2 个核心在客户机中生效。

综上所述,即使我在主机端对虚拟机进行了实时核心分配,我也需要重新启动虚拟机才能使其生效。在这种情况下,实时核心分配的原因是什么?

谢谢你,

答案1

x86 不会自动检测新 CPU,您需要告诉客户机将其设置为在线。可以通过以下方式完成:echo 1 > /sys/devices/system/cpu/cpuX/online

有些人使用 udev 规则来ACTION=="add", SUBSYSTEM=="cpu", ATTR{online}="1"自动执行此操作。

也有限制通过核参数 maxcpus(在启动时)并且smp可以完全禁用它。如果有疑问,请查看[SMP]该文档中标记的所有条目。

回答后我意识到这是在其他问题中讨论过已经在那里使用了其他术语,但答案相同。

相关内容