如何使用 QEMU 启动多个虚拟机,以及如何指定每个 VM 在特定核心上运行?

How can I start multiple virtual machines using QEMU and how to specify each VM to run on a specific core?

提问人:MUAS 提问时间:9/1/2023 更新时间:9/1/2023 访问量:252

问:

我正在尝试使用具有 KVM 加速的 QEMU 在同一主机上运行多个虚拟机。我还试图让每个虚拟机在特定的 CPU 治疗上运行。例如,我想为 VM0 分配两个内核,并让它以独占方式在内核 0 和内核 1 上运行。

我目前的方法是以下方式启动 qemu,对于我想启动的每个 VM,我调用以下命令。例如,如果我想启动五个虚拟机,我会调用 qemu-system-x86_64 五次。

  taskset -c 0,1 \
  sudo qemu-system-x86_64 \
    -nographic -monitor none -serial stdio \
    -machine accel=kvm,type=q35 \
    -cpu host \
    -smp 2 \
    -m 2G \
    -snapshot \
    -device virtio-net-pci,netdev=net0 \
    -netdev user,id=net0 \
    -drive if=virtio,format=raw,file="base.img" \
    -drive if=virtio,format=raw,file="seed.img" \

我有两个问题。首先,有没有办法使用 QEMU 而不是任务集将 CPU 核心分配给 VM?我尝试在 QEMU 文档中寻找核心掩码或类似的东西,但找不到任何东西。我担心 qemu-system-x86_64 生成的任何其他进程也会继承分配的核心,并与 VM 共享这些核心。也许我没有正确理解 QEMU,但我想当您启动 VM 时,它可以使用分配给它的内核数,并且由于任务集,它们将被固定到指定的核心。但我认为 QEMU 在后面也做了很多虚拟机监视器 (VMM) 的事情。我真的不希望这些东西被固定到任务集核心,并希望操作系统自由安排它们。这是实际发生的事情吗?

其次,这是使用 QEMU 启动多个虚拟机的最佳方式吗?有没有一种协调的方式可以告诉 QEMU 生成 5 个虚拟机,或者您每次只需要手动调用 qemu-system-x86_64?每次调用 qemu-system-x86_64 会导致性能不佳吗?同样,我不确定每次对 qemu-system-x86_64 的调用是否都在幕后生成自己的 VMM 内容,并且每次调用都会重复这些内容,可能会消耗比所需更多的资源。是否有一个 QEMU 守护程序,如中央虚拟机管理程序,在后台执行所有管理,并使每个调用 qemu-system-x86_64 只处理与该特定 VM 相关的内容?

虚拟机 QEMU 虚拟化 KVM

评论

1赞 Peter Maydell 9/2/2023
如果你想要一些比直接运行QEMU更低级的东西,可以看看virt-manager或其他基于libvirt的东西。这是“管理层”,它支持运行多个 VM、将 VM 固定到特定主机 CPU 等。如果你直接运行QEMU,你必须手动完成所有这些工作,这可能会有点乏味。

答: 暂无答案