我正在从Xen迁移到Kvm。
在Xen中,我能够轻松地将主机cpus引脚到客户vms,也可以将主机cpus引脚到"dom0“。
在Kvm中,我也可以很容易地将主机cpus连接到来宾vms,但据我所见,没有什么可以阻止在主机操作系统上运行的应用程序使用这些cpus。我希望防止在主机上运行的程序饥饿/增加客人延迟的情况。
我可以手动执行一个详细的cgroup策略,但可能我只是缺少libvirt / centos7中的一个设置吗?
此外,也有一个“仿真器”设置的客人。我应该将“仿真器”固定在专用主机cpus上,还是应该将其限制在来宾cpus上?目标是尽可能地限制来宾的延迟。
发布于 2017-09-19 10:31:10
如果我正确地理解了您的问题,那么您希望实现的是限制管理程序,以便它只能使用单个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。
发布于 2017-09-12 12:41:10
在Linux中,如果希望进程只使用主机中的特定cpu,taskset命令可以提供帮助。
在两个cpus上运行一个新程序:
taskset -c 0,2 /home/app/myprogramm若要更改已经运行的进程的cpu关联,请执行以下操作:
taskset -p -c 0,2 <pid_of_your_proccess>在kvm中没有dom0,您有kvm内核模块,所以所有东西都集成在内核中,不像xen中有dom0作为特权域,所以可以将内核运行的进程固定在一起。

https://serverfault.com/questions/871053
复制相似问题