kvm/centos7的CPU固定策略

Oli*_*r S 3 libvirt kvm-virtualization pinning centos7

我正在从 Xen 迁移到 Kvm。

在 Xen 中,我能够轻松地将主机 cpus 固定到来宾虚拟机,并将主机 cpus 固定到 "dom0"

在 Kvm 中,我还可以轻松地将主机 cpus 固定到来宾 vms,但是,据我所知,没有什么能阻止在主机操作系统上运行的应用程序使用这些 cpus。我想防止在主机上运行的程序饿死/增加来宾延迟的情况。

我可以手动执行详细的 cgroup 策略,但也许我只是缺少 libvirt / centos7 中的设置?

此外,还有一个供客人使用的“emulatorpin”设置。我应该将“模拟器”固定到专用主机 cpu 上,还是应该将其限制为来宾 cpu目标是尽可能地限制来宾的延迟

HBr*_*ijn 5

如果我正确理解您的问题,您想要实现的是限制虚拟机管理程序,以便它只能使用单个 CPU/内核(或有限数量)用于自己的进程、中断处理和所有内容。并且所有其他内核都可以由 libvirt 分配给来宾系统。

相对简单的是isolcpus引导参数,它允许您将一个或多个 CPU 与调度程序隔离。这可以防止调度程序在此 CPU 上调度任何用户空间线程。

即在您的虚拟机管理程序中/etc/default/grub

GRUB_CMDLINE_LINUX="... quiet isolcpus=0,1"
Run Code Online (Sandbox Code Playgroud)

这应该可以防止虚拟机管理程序上的任何用户空间程序使用大于 1 的内核。然后 Libvirt 可以将虚拟服务器固定到剩余的空闲内核。

我不确定isolcpus引导参数是否也确保所有中断都将限制在这些内核上。否则,中断也有自己的亲和性属性,smp_affinity,它定义了将处理中断请求的处理器。特定中断请求的中断关联值存储在相关/proc/irq/irq_number/smp_affinity文件中,默认设置为/proc/irq/default_smp_affinity. smp_affinity 被存储为代表系统中所有处理器的十六进制位掩码。默认值为 f,意味着中断请求可以在系统中的任何处理器上处理。将此值设置为 1 意味着只有处理器 0 可以处理中断。


用于控制 RHEL 和 CentOS 7 的处理器和调度亲和性的工具称为 tuna