我正在从Xen迁移到Kvm。
在Xen中,我能够轻松地将主机cpus连接到guest虚拟机,并将主机cpus固定到“dom0” 。
在Kvm中,我也可以轻松地将主机cpus固定到guest虚拟机vms,但是据我所知,没有任何东西阻止在主机操作系统上运行的应用程序使用这些cpus。 我想防止在主机上运行的程序挨饿/增加客人的等待时间的情况。
我可以手动做一个详细的cgroup政策,但也许我只是缺lesslibvirt / centos7中的设置?
另外还有一个“模拟器”设置为客人。 我应该将“模拟器”固定在专用主机cpus上,还是应该将其限制在guest cpus ? 目标是尽可能地限制客人的等待时间 。
如果我正确地理解你的问题,你想要达到的目的是限制pipe理程序,所以它只能使用一个CPU /内核(或有限的数量),因为它自己的进程,中断处理和一切。 而且所有其他核心可以由libvirt分配给访客系统。
isolcpus启动参数相对简单,它允许您将一个或多个CPU与调度程序隔离。 这可以防止调度程序调度此CPU上的任何用户空间线程。
即在/etc/default/grubpipe理程序中设置:
GRUB_CMDLINE_LINUX="... quiet isolcpus=0,1"
应该阻止pipe理程序上的任何用户空间程序使用大于1的内核。然后Libvirt可以将虚拟服务器连接到剩余的空闲内核。
我不确定isolcpus启动参数是否也确保所有中断将被限制到这些核心。 否则,中断也有自己的亲和属性smp_affinity ,它定义了处理中断请求的处理器。 特定中断请求的中断关联值存储在关联的/proc/irq/irq_number/smp_affinity文件中,默认值是使用/proc/irq/default_smp_affinity 。 smp_affinity存储为表示系统中所有处理器的hex位掩码。 缺省值是f,表示可以在系统中的任何处理器上处理中断请求。 将该值设置为1意味着只有处理器0可以处理该中断。
控制RHEL和CentOS 7的处理器和日程安排的工具称为tuna
在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作为特权域,所以你可以固定内核运行的进程。