QEMU KVM 中的动态 CPU 分配/扩展

QEMU KVM 中的动态 CPU 分配/扩展

如何根据虚拟机的工作负载动态分配/扩展 QEMU VM 的 CPU 资源?这需要脚本吗?在运行时是否可以更改 CPU 分配?

我有一个 Windows 客户机和一个 Linux 主机。

答案1

简短回答:不用费心去做这些。只需告诉您的客户机它需要多少个 vCPU,然后让 Linux 主机来管理它们。

长答案:支持通过virsh setvcpus命令动态添加和删除 vCPU。但是,对于一般情况来说,它的使用比较困难且不切实际。

第一个问题是,您无法添加比域 xml 文件中配置的最大 vCPU 更多的 vCPU。例如,一个配置了 1 个当前/最大 vCPU 的客户端。运行该命令virsh setvcpus MyGuest 2返回以下错误:

error: invalid argument: requested vcpus is greater than max allowable vcpus for the live domain: 2 > 1

因此,您需要调整(提高)最大 vCPU 数量在运行时添加更多 CPU。但是,更改最大 vCPU 数量需要重新启动整个域(即:关闭 - 配置编辑 - 启动)。

话虽如此,人们可能会倾向于“超额认购”最大 vCPU 数量,同时让当前 vCPU 保持在更合理的水平(即:设置 4 个最大 vCPU,但当前只有 1 个处于活动状态)。这样做确实足以在运行时管理 CPU,因为现在virsh setvcpus MyGuest 2返回时没有错误。查看客户机,您可以看到新添加的 CPU:

# dmesg
[   39.814166] CPU1 has been hot-added

# lscpu
CPU(s):                  2
  On-line CPU(s) list:   0
  Off-line CPU(s) list:  1

然而,新添加的CPU离线,这意味着客户机将不会使用它。必须通过 启用新 CPU chcpu -e 1。或者,您可以将“--guest”参数传递给virsh运行的命令virsh setvcpus MyGuest 2 --guest,但这需要与客户机中的 qemu-agent 建立有效连接,否则您将收到以下错误:

error: argument unsupported: QEMU guest agent is not configured

移除 CPU 更容易,因为virsh setvcpus MyGuest 1即使没有代理连接,运行也会离线并从您的客户机中移除 vCPU。

相关内容