Virtualização: Fixação de vCPU com CPU Host Hyperthreading?

1

Estou usando o KVM / libvirt em um servidor Linux com CPU Core i7-2600, que tem a seguinte topologia de CPU (1 soquete, 4 núcleos, 8 segmentos):

Physical | Logical
---------+--------
Core 0   | 0, 4
Core 1   | 1, 5
Core 2   | 2, 6
Core 3   | 3, 7

Eu normalmente executo 3 máquinas virtuais neste host, cada uma com 2 CPUs virtuais. A fim de melhorar o desempenho, mantendo os caches quentes, gostaria de fixar o vCores das VMs para núcleos de host fixos.

A questão agora é o mapeamento de núcleos de VMs para hospedar núcleos, considerando o fato de que a CPU do host usa Hyperthreading:

Opção 1: uma VM por núcleo de host físico

VM1: logical cores 1, 5
VM2: logical cores 2, 6
VM3: logical cores 3, 7

Dessa forma, os dois núcleos virtuais de uma VM seriam mapeados para hyperthreads irmãos na CPU do host. O código do convidado lucraria com a localidade do cache, pois os dois núcleos do host compartilham alguns caches.

Mas, dado o fato de que dois hyperthreads também compartilham algumas unidades funcionais, eles se tornam mais lentos sob carga computacional.

Opção 2: núcleos de VMs distribuídos

VM1: logical cores 1, 2
VM2: logical cores 3, 5
VM3: logical cores 6, 7

Esse mapeamento tem a vantagem de que, se uma VM experimentar carga computacional em ambos os seus dois núcleos virtuais, essa carga será mapeada em dois núcleos físicos separados no host. Se nenhuma outra VM estiver sob carga naquele momento, a primeira poderá usar dois núcleos físicos, em vez de apenas um com a Opção 1.

Todas as VMs executam principalmente serviços web (Nginx, MySQL, PHP-FPM), então eu sei que a questão é de natureza bastante teórica - mas eu ainda gostaria de saber.

    
por lynix 14.06.2015 / 10:42

2 respostas

4

Você pode estar pensando demais nisso.

A atribuição manual de núcleos aqui pode resultar em um desempenho menor. No mundo da VMware, não fazemos isso a menos que haja requisitos muito específicos, mas, para a carga de trabalho e os aplicativos que você descreveu, não é necessário. Deixe o KVM agendar as coisas e pronto. Em caso de dúvida, obtenha mais núcleos e soquetes. Mas a CPU não será o fator limitante em uma implantação tão pequena.

    
por 14.06.2015 / 15:32
0

A opção 1 não deve desacelerar na maioria dos casos, mas o sistema operacional e os programas podem ficar satisfeitos com suas cargas de trabalho. Pode ficar empilhado. Eu acho que a opção 2 é melhor se o seu vizinho não se importar com a lentidão do ~ minúsculo.

    
por 14.06.2015 / 15:22