Uma VM com 2 CPUs é realmente mais rápida que uma com 4 CPUs?

67

Nossa TI criou uma VM com 2 CPUs alocadas em vez das 4 solicitadas. O motivo é que a VM tem melhor desempenho com 2 CPUs do que com 4 (de acordo com eles). A lógica é que o hipervisor de VM (VMWare neste caso) aguarda que todas as CPUs estejam disponíveis antes de contratar qualquer uma delas. Assim, leva mais tempo para esperar por 4 em vez de 2 CPUs.

Essa afirmação faz sentido?

AngryHacker
fonte

Respostas:

62

Isso costumava ser verdade, mas não é mais exclusivamente verdade.

O que eles estão se referindo é Co-Agendamento Estrito .

Mais importante ainda, enquanto no algoritmo estrito de co-agendamento, a existência de uma vCPU atrasada faz com que toda a máquina virtual seja co-parada. No algoritmo de co-agendamento relaxado, uma vCPU líder decide se deve parar-se com base na inclinação contra a vCPU mais lenta do irmão

Agora, se o host tiver apenas 4 threads, você seria bobo ao alocar todos eles. Se ele tiver dois processadores e 4 threads por processador, talvez você não queira alocar todo o conteúdo de um único processador, pois seu hipervisor deve tentar manter vCPUs no mesmo nó NUMA para tornar o acesso à memória mais rápido. dificultando esse trabalho alocando um soquete inteiro a uma única VM (consulte a página 12 desse PDF acima).

Portanto, existem cenários em que menos vCPUs podem ter um desempenho melhor que mais, mas isso não ocorre 100% do tempo.

Tudo isso dito e feito, muito raramente aloco mais de 3 vCPUs por hóspede. Todo mundo recebe 2 por padrão, 3 se for uma carga de trabalho pesada e 4 para itens como servidores SQL ou VMs de processamento em lote realmente pesadas ou um servidor de terminal com muitos usuários.

Mark Henderson
fonte
3
Apenas um aparte - mesmo além dos obstáculos da virtualização, geralmente é complicado escrever software que explora o paralelismo. Se a equipe de software não for boa o suficiente, talvez seja melhor ter quatro hosts virtuais executando uma instância do software cada um do que um host executando quatro threads de execução.
Luaan
4
@Luaan A caixa tem o SQL Server, então eu suponho que eles tenham alguns caras de software bons lá.
precisa saber é o seguinte
11
@AngryHacker sim O servidor SQL pode usar todos os quatro núcleos com muita eficiência, desde que você tenha as MAXDOPconfigurações apropriadas . No entanto, dependendo da carga de trabalho, um servidor SQL com impostos excessivos geralmente é um sinal de design incorreto do banco de dados - índices ruins, sem índices agrupados, muitos índices, sem otimização etc. (nem sempre, mas frequentemente).
Mark Henderson
11
@Luaan Isso ainda é paralelismo ... apenas com uma latência muito maior se eles precisarem conversar um com o outro. :)
reirab
@ MarkHenderson É muito bem otimizado, mas algumas cargas de trabalho são grandes demais para serem manuseadas facilmente por 2 CPUs, além de várias outras consultas ao mesmo tempo.
AngryHacker
15

Isso depende muito do hipervisor subjacente e dos administradores que o executam, deixe-me explicar:

  1. É uma prática ruim fornecer arbitrariamente 4 CPUs apenas porque você solicitou. De um modo geral, você acha que precisa de 4; mas o monitoramento de recursos diz que você só precisa de 1.
  2. O VMware ESXi, por exemplo, exige o bloqueio de todas as pCPUs quando uma vCPU faz uma solicitação de recursos da CPU ; portanto, neste hipervisor, é ruim para o desempenho. O KVM não bloqueia como o ESXi; ele usa o agendador do kernel subjacente, mas ainda a longo prazo pode criar contenção de CPU.
  3. Se você está construindo sistemas desde o início com 4 CPUs, não está realmente expandindo, mas sim (o que é uma prática ruim, especialmente em VMs). Você pode verificar como está arquitetando o que quer que esteja trabalhando, para que possa ser construído de acordo com as modernas infraestruturas de nuvem atuais.

O que você pode aprender com isso? Sempre crie VMs com recursos mínimos e aumente conforme necessário. Sempre expanda em vez de aumentar e você poderá executar seu aplicativo em qualquer lugar.

Devido ao bloqueio que pode ser experimentado com o hipervisor, é realmente verdade que 2 CPUs podem ser mais rápidas que 4 CPUs.


fonte
4

Sim, a afirmação faz sentido em geral. No entanto, é algo que você deve testar sua configuração e carga de trabalho exatas. Às vezes, mais CPUs são melhores se você puder tirar vantagem delas. No entanto, se você não tiver tanto paralelismo, uma VM configurada com menos CPUs geralmente terá um desempenho um pouco melhor, pois evita lentidão devido a pausas de estado de CPU pronto.

Reduzi as vCPUs em várias de nossas VMs e vi uma melhora na taxa de transferência na maioria. Um punhado piorou e precisava ser aumentado na contagem de vCPU.

Brian Knoblauch
fonte