Linux Livirt/KVM:默认将所有虚拟机置于 cpuset 中,无需重新配置

Linux Livirt/KVM:默认将所有虚拟机置于 cpuset 中,无需重新配置

我正在尝试设置一个系统,其中我在一组主机上有一些进程,这些进程位于一个(屏蔽)cpuset 中,而其他所有进程(即所有虚拟机)都位于另一个 cpuset 中。这里的目标是拥有一个超融合系统,其中虚拟机在一组任意的 CPU 核心上运行,而存储进程在其他核心上运行,并进行隔离。我选择了 cpuset 来完成这项任务,因为它似乎是“最简单”的方法。

但是这似乎不能正常工作。首次设置 cset 防护罩时可以移动虚拟机,但稍后启动虚拟机会导致以下错误:

libvirt: Cgroup error : Invalid value '0-31' for 'cpuset.cpus': Invalid argument

显然,它试图将虚拟机放入根 cset 中,这是不允许的。这是使用非常默认的配置,仅指定虚拟机中的核心数,而无需考虑单个 CPU ID 或任何此类调整(这是此设置工作的必要条件;节点可能不对称,具有不同的核心数、拓扑等,而虚拟机可以在它们周围实时迁移)。

但总的来说,我想知道:是否可以将 Libvirt/KVM 配置为默认使用特定的 cpuset,而无需以任何方式重新配置虚拟机(无需手动配置 CPU 固定诡计),并且无需对每个进程进行任何手动调整?

答案1

在基于 systemd 的主机上,所有虚拟机都放置在下面的 cgroup 中,/machine.slice因此如果您为 设置 CPU 掩码,/machine.slice它将应用于所有虚拟机。同样,如果您CPUAffinity在 中设置/etc/systemd/system.conf,这可以使所有非虚拟机进程避免使用虚拟机使用的 CPU。

相关内容