我有 Ubuntu 16.04 作为主机,Windows Server 2012 作为客户机,使用 KVM 中的 Virtio 驱动程序安装。我能够在客户机运行时增加 CPU,但是无法减少 CPU。分配给客户机的最大 CPU 是 20。我在客户机启动时分配了 10 个 CPU,我正在尝试执行以下命令将 CPU 减少到 8 个。
virsh setcpus --live --guest generic 8
但这会导致以下错误:
error: internal error: 'can-offline' missing in reply of guest-get-vcpus
我尝试查看 guest-get-vcpus 命令,但结果如下:
$virsh qemu-agent-command generic '{"execute":"guest-get-vcpus"}' --pretty
{
"return": [
{
"online": true,
"logical-id": 0
},
.
.
.
{
"online": true,
"logical-id": 9
}
]
}
但是结果只有两个参数“online”和“logical-id”。但是我希望客户机也返回值“can-offline”。
我已经安装了 QEMU 版本 2.5 和最新的 virtio 驱动程序版本 0.1.126 和 libvirtd 版本 1.3.1。
答案1
您尝试运行的热插拔命令需要客户机代理配合才能完成拔出操作。事实上,它实际上根本没有拔出 - 它只是要求客户机操作系统将 vCPU 标记为脱机。不幸的是,仅在 Linux 版本的 QEMU 客户机代理中实现了对此的支持。即使在最新的 2.9.0 版 QEMU 中,客户机代理也无法在 Windows 客户机中执行 CPU 脱机。
您收到的错误消息毫无帮助,实际上表明 QEMU 客户机代理中存在错误。我将提交错误报告以修复该问题,但这不会使 CPU 离线功能正常工作 - 它只会改进错误消息,使其显示“此客户机操作系统不支持 CPU 离线”。