我可以限制 QEMU 可以使用的 CPU 数量吗?是否有可以设置的命令行选项?

我可以限制 QEMU 可以使用的 CPU 数量吗?是否有可以设置的命令行选项?

我目前正在使用 Debian(CutefishOS)PC,有一个问题。

如何使用命令行参数限制 QEMU 可以使用的 CPU 数量?

我的 PC 在 Debian 下有 12 个核心(实际上是 6 个核心),当我尝试使用 QEMU 时,它会使用全部 12 个核心,而不是像我希望的那样只使用 2 个。

您能用命令行参数来回答这个问题吗?

答案1

帮助文章 QEMU/选项 描述此选项:

-smp <NUMBER>- 指定允许客户机使用的核心数。该数字可以高于主机系统上可用的核心数。用于-smp $(nproc)使用所有当前可用的核心。

请注意,虚拟机的 CPU 是模仿CPU,因此它基本上在操作系统中被视为单独的进程或线程。这就是为什么该数字可以高于物理核心数的原因,因为进程/线程将根据操作系统的调度算法与物理核心轮流使用。

还要注意,调度程序不一定会将相同的物理 CPU 再次分配给相同的进程/线程,因此可能看起来所有 CPU 都已被使用,因为时间冰是以毫秒为单位计算的。

答案2

如果您担心虚拟机实际使用的处理器,我建议您使用来解决您的问题tasksetDebian 的 taskset 手册页

通过例如获取 qemu 的进程 ID ps aux | grep qemu-system-x86_64。在我的测试中,它是 9123。

像这样在任务集中使用它(以 root 身份/使用 sudo):taskset -c -p 0-2,6-8 9123

这会限制进程 ID 和相应的线程使用 CPU 核心 0、1、2、7、8、9。

我使用这个范围来展示如何为一个过程指定单独的范围。

我习惯-c将核心指定为数字而不是位掩码,这对我来说在桌面使用中是不直观的。

我习惯-p使用现有的进程 ID,因为我通常在程序已经运行时调整核心。

相关内容