Cpu fixando estratégia para kvm / centos7

3

Estou migrando do Xen para o Kvm.

No Xen, consegui fixar facilmente o cpus para guest vms, e também para fixar host cpus no "dom0" .

No Kvm eu também posso fixar com facilidade o cpus do host para guests vms, mas, até onde eu posso ver, nada impede que o aplicativo seja executado no sistema operacional host para usar esses cpus. Eu quero evitar o caso em que um programa em execução no host morre de fome / aumenta a latência de convidados.

Eu poderia fazer manualmente uma elaborada política de cgroup, mas talvez eu esteja perdendo uma configuração no libvirt / centos7?

Além disso, há também uma configuração "emulatorpin" para os convidados. Devo fixar o "emulador" para CPUs dedicadas, ou devo apenas restringi-lo à CPU guest ? O objetivo é limitar o máximo possível a latência do convidado .

    
por Olivier S 29.08.2017 / 16:10

3 respostas

4

Se eu entendi sua pergunta corretamente, o que você quer é restringir o hipervisor para que ele possa usar apenas uma única CPU / núcleo (ou um número limitado) para seus próprios processos, interrupção de tratamento e tudo mais. E que todos os outros núcleos podem ser atribuídos pelo libvirt aos sistemas convidados.

Relativamente simples é o parâmetro de inicialização isolcpus , que permite isolar uma ou mais CPUs do agendador. Isso impede que o planejador agende qualquer encadeamento de espaço do usuário nessa CPU.

i.e. no seu hipervisor em /etc/default/grub set:

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

que deve impedir que quaisquer programas de espaço do usuário no hipervisor usem núcleos > 1. O Libvirt pode, então, fixar servidores virtuais aos núcleos livres remanescentes.

Não tenho certeza se o parâmetro de inicialização isolcpus também garante que todas as interrupções sejam restritas a esses núcleos. Caso contrário, as interrupções também terão sua própria propriedade de afinidade, smp_affinity , que define os processadores que manipularão a solicitação de interrupção. O valor de afinidade de interrupção para uma solicitação de interrupção específica é armazenado no arquivo /proc/irq/irq_number/smp_affinity associado e o padrão é definido com /proc/irq/default_smp_affinity . smp_affinity é armazenado como uma máscara de bits hexadecimal representando todos os processadores no sistema. O valor padrão é f, o que significa que uma solicitação de interrupção pode ser manipulada em qualquer processador no sistema. Configurar este valor para 1 significa que apenas o processador 0 pode manipular a interrupção.

A ferramenta para controlar o processador e a afinidade de agendamento para o RHEL e o CentOS 7 é chamada tuna

    
por 19.09.2017 / 12:31
1

No Linux, se você quiser um processo, use apenas uma cpu específica em seu host, o comando taskset pode ajudar

executando um novo programa em dois processadores:

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

Para alterar a afinidade da CPU do processo já em execução:

taskset -p -c 0,2 <pid_of_your_proccess>

não há dom0 no kvm, você tem o módulo kvm do kernel, então tudo está integrado no kernel, não é como no xen que você tem dom0 como domínio privilegiado, então você pode fixar o processo que o kernel executa.

    
por 12.09.2017 / 14:41
0

isolcpus é agora reprovado :

isolcpus= [KNL,SMP,ISOL] Isolate a given set of CPUs from disturbance. [Deprecated - use cpusets instead] Format: [flag-list,]<cpu-list>

use cpuset com libvirt

    
por 12.09.2018 / 00:16