kvm / centos7 的 CPU 固定策略

kvm / centos7 的 CPU 固定策略

我正在从 Xen 迁移到 Kvm。

在 Xen 中,我能够轻松地将主机 CPU 固定到客户虚拟机,也可以将主机 CPU 到“dom0”

在 Kvm 中,我还可以轻松地将主机 CPU 固定到客户虚拟机,但据我所知,没有什么可以阻止在主机操作系统上运行的应用程序使用这些 CPU。我想防止主机上运行的程序导致客户机耗尽/增加延迟的情况。

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

此外,还为客人提供“emulatorpin”设置。我应该将“模拟器”固定到专用主机 CPU,还是应该将其限制到客户机 CPU目标是尽可能限制客户端的延迟

答案1

如果我正确理解了您的问题,您想要实现的目标是限制虚拟机管理程序,使其只能使用单个 CPU/核心(或有限数量)来执行其自己的进程、中断处理和所有操作。并且 libvirt 可以将所有其他核心分配给客户系统。

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

即在您的虚拟机管理程序上/etc/default/grub设置:

GRUB_CMDLINE_LINUX="... quiet isolcpus=0,1"

这应该可以防止虚拟机管理程序上的任何用户空间程序使用核心 > 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

答案2

在 Linux 中,如果你希望某个进程仅使用主机中的特定 CPU,taskset命令可以帮助

在两个 CPU 上运行一个新程序:

taskset -c 0,2 /home/app/myprogramm

要更改已经运行的进程的 CPU 亲和性:

taskset -p -c 0,2 <pid_of_your_proccess>

kvm 中没有 dom0,您有 kvm 内核模块,因此所有内容都集成在内核中,不像在 xen 中您有 dom0 作为特权域,因此您可以固定内核运行的进程。

在此处输入图片描述

答案3

isolcpus就是现在已弃用

          [Deprecated - use cpusets instead]
          Format: [flag-list,]<cpu-list>```

使用cpusetlibvirt

相关内容