Configurando o Número de Núcleos de CPU do VMware por Soquete: Melhores Práticas

Ao configurar as definições do processador para uma nova máquina virtual, existem vários conceitos-chave a serem compreendidos: como calcular o número de núcleos do processador por CPU e núcleos de CPU por soquete e como essas configurações afetam a velocidade das máquinas virtuais. Além disso, é importante entender o que garante melhor desempenho da VM: limitar o número de processadores e ter mais núcleos de CPU ou ter mais processadores com menos núcleos?

Continue lendo para aprender sobre esses conceitos e os princípios básicos para a configuração de CPU para máquinas virtuais em hosts ESXi.

Terminologia

Vamos começar com as definições dos termos usados ao configurar as configurações de CPU para máquinas virtuais. Esses termos ajudarão a entender o princípio de funcionamento e evitar confusão sobre o número de núcleos por CPU, núcleos de CPU por soquete e o número de núcleos de CPU versus velocidade.

Soquete de CPU

A CPU Socket is a physical connector on the motherboard to which a single physical CPU is connected. A motherboard has at least one CPU socket. Server motherboards usually have multiple CPU sockets that support multiple multicore processors. CPU sockets are standardized for different processor series. Intel and AMD use different CPU sockets for their processor families.

CPU

A CPU (central processing unit, microprocessor chip, or processor) is a computer component. It is the electronic circuitry with transistors that is connected to a socket. A CPU executes instructions to perform calculations, run applications, and complete tasks.

Quando a velocidade do clock dos processadores se aproximou da barreira térmica, os fabricantes mudaram a arquitetura dos processadores e começaram a produzir processadores com vários núcleos de CPU. Para evitar confusão entre processadores físicos e processadores lógicos ou núcleos de processador, alguns fornecedores se referem a um processador físico como um soquete.

Núcleo de CPU

A CPU core is the part of a processor containing the L1 cache. The CPU core performs computational tasks independently without interacting with other cores and external components of a “big” processor that are shared among cores. Basically, a core can be considered as a small processor built into the main processor that is connected to a socket. Applications should support parallel computations to use multicore processors rationally.

Hyper-threading

Hyper-threading é uma tecnologia desenvolvida por engenheiros da Intel para trazer computação paralela para processadores que possuem um núcleo de processamento. A estreia do hyper-threading foi em 2002, quando o processador Pentium 4 HT foi lançado e posicionado para computadores desktop. Um sistema operacional detecta um processador de núcleo único com hyper-threading como um processador com dois núcleos lógicos (não físicos). Da mesma forma, um processador de quatro núcleos com hyper-threading aparece para um SO como um processador com 8 núcleos. Quanto mais threads são executadas em cada núcleo, mais tarefas podem ser feitas em paralelo.

Os processadores modernos da Intel possuem tanto vários núcleos quanto hyper-threading. O hyper-threading geralmente está ativado por padrão e pode ser ativado ou desativado no BIOS. A simultaneidade de multi-threading (SMT) da AMD é o análogo do hyper-threading para os processadores AMD.

vCPU

A vCPU is a virtual processor that is configured as a virtual device in the virtual hardware settings of a VM. A virtual processor can be configured to use multiple CPU cores. A vCPU is connected to a virtual socket.

Superprovisão de CPU

Superprovisão de CPU é o fornecimento de mais processadores lógicos (núcleos de CPU do host físico) para VMs do que o número total de processadores lógicos disponíveis no host físico. A superprovisão de CPU permite uma flexibilidade e eficiência aumentadas na utilização de recursos, mas pode levar à degradação de desempenho se a demanda total exceder a capacidade física de CPU disponível.

NUMA

NUMA (non-uniform memory access) é um design de memória de computador usado em computadores multiprocessados. A ideia é fornecer memória separada para cada processador (ao contrário de UMA, onde todos os processadores acessam a memória compartilhada por meio de um barramento). Ao mesmo tempo, um processador pode acessar a memória que pertence a outros processadores usando um barramento compartilhado (todos os processadores acessam toda a memória no computador). Uma CPU tem a vantagem de desempenho de acessar sua própria memória local mais rapidamente do que outra memória em um computador multiprocessado.

Essas arquiteturas básicas são combinadas em computadores multiprocessados modernos. Os processadores são agrupados em um pacote ou nó de CPU multicores. Os processadores que pertencem ao mesmo nó compartilham o acesso aos módulos de memória, assim como na arquitetura UMA. Além disso, os processadores podem acessar a memória do nó remoto por meio de uma interconexão compartilhada. Os processadores fazem isso para a arquitetura NUMA, mas com desempenho mais lento. Esse acesso à memória é feito por meio da CPU que possui aquela memória, em vez de diretamente.

Os nós NUMA são pares CPU/Memória que consistem em um soquete de CPU e os módulos de memória mais próximos. A NUMA geralmente é configurada no BIOS como a intercalação de nós ou configuração de memória intercalada.

Exemplo: Um host ESXi tem dois soquetes (duas CPUs) e 256 GB de RAM. Cada CPU tem 6 núcleos de processador. Este servidor contém dois nós NUMA. Cada nó NUMA tem 1 soquete de CPU (uma CPU), 6 núcleos e 128 GB de RAM.

O ESXi sempre tenta alocar memória para uma VM a partir de um nó NUMA nativo (local). Um nó local pode ser alterado automaticamente se houver alterações nas cargas da VM e nas cargas do servidor ESXi.

vNUMA

Virtual NUMA (vNUMA) é o análogo de NUMA para máquinas virtuais VMware. Um vNUMA consome recursos de hardware de mais de um nó NUMA físico para fornecer desempenho ótimo. A tecnologia vNUMA expõe a topologia NUMA a um sistema operacional convidado. Como resultado, o sistema operacional convidado está ciente da topologia NUMA subjacente para o uso mais eficiente. A versão de hardware virtual de uma VM deve ser 8 ou superior para usar vNUMA.

O tratamento do vNUMA foi significativamente melhorado no VMware vSphere 6.5, e este recurso não é mais controlado pelo valor de núcleos da CPU por soquete na configuração da VM. Por padrão, o vNUMA é habilitado para VMs que têm mais de 8 processadores lógicos (vCPUs). Você pode habilitar o vNUMA manualmente para uma VM editando o arquivo de configuração VMX da VM e adicionando a linha numa.vcpu.min=X, onde X é o número de vCPUs para a máquina virtual.

Calculando o Número de Núcleos

Vamos descobrir como calcular o número de núcleos de CPU físicos, núcleos de CPU lógicos e outros parâmetros em um servidor.

  • O número total de núcleos de CPU físicos em uma máquina host é calculado com a fórmula:

    (O número de soquetes do processador) x (O número de núcleos/processor) = O número de núcleos de processador físico

    Apenas os soquetes do processador com processadores instalados devem ser considerados.

  • Se o hyper-threading for suportado, calcule o número de núcleos de processador lógico usando a fórmula:

    (O número de núcleos de processador físico) x (2 threads/núcleo de processador físico) = o número de processadores lógicos

  • Por fim, use uma única fórmula para calcular os recursos de processador disponíveis que podem ser atribuídos a VMs:

    (Soquetes de CPU) x (Núcleos de CPU) x (Threads)

Por exemplo, se você tiver um servidor com dois processadores, cada um com 4 núcleos e suportando hyper-threading, então o número total de processadores lógicos que podem ser atribuídos a VMs é:

2(CPUs) x 4(núcleos) x 2(HT) = 16 processadores lógicos

Um processador lógico pode ser atribuído como um processador ou um núcleo de CPU para uma VM nas configurações da VM.

Quanto a máquinas virtuais, devido a recursos de emulação de hardware, elas podem usar múltiplos processadores e núcleos de CPU em sua configuração para operação. Um núcleo de CPU físico pode ser configurado como um CPU virtual ou um núcleo de CPU virtual para uma VM.

  • A quantidade total de ciclos de clock disponível para uma VM é calculada como:

    (O número de soquetes lógicos) x (A velocidade de clock da CPU)

Se você configurar uma VM para usar 2 vCPUs com 2 núcleos quando você tem um processador físico com velocidade de clock de 3,0 GHz, então a velocidade total do clock é 2x2x3=12 GHz. Se houver overcommitment de CPU em um host ESXi, a frequência disponível para uma VM pode ser menor do que o calculado se as VMs realizarem tarefas intensivas de CPU.

Limitações para Núcleos de CPU por Soquete

As limitações de CPU/núcleo no vSphere 7.0 Update 1 e vSphere 8.0 estão listadas abaixo.

  • O número máximo de soquetes de processador virtual atribuídos a uma VM é 768. Se você deseja atribuir mais de 768 processadores virtuais, configure uma VM para usar processadores multinúcleo.
  • O número máximo de núcleos de processador que podem ser atribuídos a uma única VM é 768. Uma máquina virtual não pode usar mais núcleos de CPU do que o número de núcleos de processador lógicos em uma máquina física.
  • Adição de CPU a quente. Se uma VM tiver 128 vCPUs ou menos que 128 vCPUs, então você não pode usar o recurso de adição de CPU a quente para esta VM e editar a configuração de CPU de uma VM enquanto uma VM está no estado em execução.Restrições de CPU do SO. Se um sistema operacional tiver um limite no número de processadores, e você atribuir mais processadores virtuais para uma VM, os processadores adicionais não são identificados e usados por um sistema operacional convidado. Limites podem ser causados pelo design técnico do SO e restrições de licenciamento do SO. Note que existem sistemas operacionais licenciados por soquete e por núcleo de CPU (por exemplo, Windows Server 2019).
  • Restrições de CPU do sistema operacional. Se um sistema operacional tiver um limite no número de processadores e você atribuir mais processadores virtuais para uma VM, os processadores adicionais não serão identificados e utilizados por um sistema operacional convidado. Os limites podem ser causados por design técnico do sistema operacional e restrições de licenciamento do sistema operacional. Observe que existem sistemas operacionais que são licenciados por soquete e por núcleo de CPU (por exemplo, Windows Server 2019).

Limites de suporte de CPU para alguns sistemas operacionais:

  • Windows 10 Pro – 2 CPUs
  • Windows 10 Home – 1 CPU
  • Windows 10 Workstation – 4 CPUs
  • Windows Server 2019 Standard/Datacenter – 64 CPUs
  • Windows XP Pro x64 – 2 CPUs
  • Windows 7 Pro/Ultimate/Enterprise – 2 CPUs
  • Windows Server 2003 Datacenter – 64 CPUs

Você pode verificar os limites de configuração para a versão do vSphere usada em seu ambiente no site da VMware.

Recomendações de Configuração

Para versões mais antigas do vSphere, recomendamos o uso de soquetes em vez de núcleos na configuração da VM. No início, você pode não ver uma diferença significativa nos soquetes de CPU ou núcleos de CPU na configuração da VM para o desempenho da VM. Esteja ciente de algumas características de configuração que fazem a diferença. Lembre-se de NUMA e vNUMA ao considerar a definição de múltiplos processadores virtuais (soquetes) para uma VM para ter um desempenho otimizado.

Se o vNUMA não for configurado automaticamente, reflita a topologia NUMA do servidor físico. Aqui estão algumas recomendações para VMs no VMware vSphere 6.5 e posterior:

  • Ao definir o número de processadores lógicos (vCPUs) para uma VM, prefira a configuração de núcleos por soquete. Continue até que a contagem exceda o número de núcleos de CPU em um único nó NUMA no servidor ESXi. Use a mesma lógica até exceder a quantidade de memória disponível em um único nó NUMA do seu servidor ESXi físico.
  • Às vezes, o número de processadores lógicos para sua configuração de VM é maior que o número de núcleos de CPU físicos em um único nó NUMA, ou a quantidade de RAM é maior que a quantidade total de memória disponível para um único nó NUMA. Considere dividir a contagem de processadores lógicos (vCPUs) entre o número mínimo de nós NUMA para obter um desempenho ideal.
  • Não defina um número ímpar de vCPUs se a contagem de CPU ou a quantidade de memória exceder o número de núcleos de CPU. O mesmo se aplica no caso de a memória exceder a quantidade de memória para um único nó NUMA em um servidor físico.
  • Não crie uma VM que tenha um número de vCPUs maior que a contagem de núcleos de processador físico em seu host físico.
  • Se você não puder desabilitar o vNUMA devido aos seus requisitos, não ative o recurso vCPU Hot-Add.

Se um sistema operacional convidado e outro software instalado em uma VM são licenciados com base em processadores, configure uma VM para usar menos processadores com mais núcleos de CPU. Por exemplo, o Windows Server 2012 R2 é licenciado por soquete, e o Windows Server 2016 é licenciado por núcleo.

Se você usar sobresubscrição de CPU na configuração de suas máquinas virtuais VMware, tenha em mente estes valores:

1:1 a 3:1 – Não deve haver problemas na execução de VMs

  • 3:1 a 5:1 – Observa-se degradação de desempenho
  • 6:1 – Prepare-se para problemas causados por uma degradação significativa de desempenho
  • A sobresubscrição de CPU com valores normais pode ser usada em ambientes de teste e desenvolvimento sem riscos.

Configuração de VMs em Hosts ESXi

Primeiro, determine o número de processadores lógicos (Número de CPUs) do seu host físico que é necessário para uma máquina virtual funcionar corretamente com desempenho suficiente. Em seguida, defina o número de soquetes virtuais com processadores (Número de Soquetes no Cliente vSphere) e o número de núcleos de CPU (Núcleos por Soquete) que você deve configurar para uma VM, levando em consideração as recomendações e limitações anteriores. A tabela abaixo pode ajudá-lo a selecionar a configuração necessária.

Primeiro, determine o número de processadores lógicos (número de CPUs) do seu host físico que é necessário para uma máquina virtual para o trabalho adequado com desempenho suficiente. Em seguida, defina o número de soquetes virtuais com processadores (Número de Soquetes no cliente vSphere) e o número de núcleos de CPU (Núcleos por Soquete) que você deve definir para uma VM, mantendo em mente as recomendações e limitações anteriores. A tabela abaixo pode ajudá-lo a selecionar a configuração necessária.

Se você precisar atribuir mais de 8 processadores lógicos para uma VM, a lógica permanece a mesma. Para calcular o número de CPUs lógicos no cliente vSphere, multiplique o número de soquetes pelo número de núcleos. Por exemplo, se você precisar configurar uma VM para usar 2 soquetes de processador, cada um com 2 núcleos de CPU, então o número total de CPUs lógicos é 2*2=4. Significa que você deve selecionar 4 CPUs nas opções de hardware virtual da VM no cliente vSphere para aplicar essa configuração.

Configurando Núcleos por CPU no cliente vSphere

Vamos explicar como configurar as opções de CPU para uma VM no cliente VMware vSphere. Insira o endereço IP do seu vCenter Server em um navegador da web e abra o cliente VMware vSphere. No navegador, abra Hosts e Agrupamentos e selecione a VM desejada que você deseja configurar. Certifique-se de que a VM esteja desligada para poder alterar a configuração de CPU. O processo de configuração é idêntico em vSphere 6.x, 7.0 e 8.0.

  1. Clique com o botão direito na VM e, no menu de contexto, clique em Editar Configurações para abrir as configurações da máquina virtual.
  2. Expanda a seção CPU na aba Hardware Virtual da janela Editar Configurações.
  3. CPU. Clique no menu suspenso na string CPU e selecione o número total de processadores lógicos necessários para esta VM. Neste exemplo, selecionamos 4 processadores lógicos para a VM Ubuntu (blog-Ubuntu1).
  4. Cores por Soquete. Nesta string, clique no menu suspenso e selecione o número necessário de núcleos para cada soquete virtual (processador).
  5. CPU Hot Plug. Se desejar utilizar esse recurso, selecione a caixa de seleção Habilitar Adição de CPU em Hot. Lembre-se das limitações e requisitos.

  6. Reserva. Selecione a alocação mínima garantida de velocidade de clock da CPU (frequência, MHz ou GHz) para uma máquina virtual em um host ou cluster ESXi.
  7. Limite. Selecione a velocidade máxima de clock da CPU para um processador VM. Essa frequência é a máxima frequência para uma máquina virtual, mesmo que esta VM seja a única VM em execução no host ou cluster ESXi com mais recursos de processador livres. O limite definido é verdadeiro para todos os processadores virtuais de uma VM. Se uma VM tiver 2 processadores de núcleo único e o limite for 1000 MHz, então ambos os processadores virtuais trabalharão com uma velocidade de clock total de um milhão de ciclos por segundo (500 MHz para cada núcleo).
  8. Ações. Este parâmetro define a prioridade de consumo de recursos por máquinas virtuais (Baixa, Normal, Alta, Personalizada) em um host ESXi ou pool de recursos. Ao contrário dos parâmetros Reserva e Limite, o parâmetro Ações é aplicado a uma VM somente se houver falta de recursos de CPU dentro de um host ESXi, pool de recursos ou cluster DRS.

    Opções disponíveis para o parâmetro Ações:

    • Baixa – 500 ações por processador virtual
    • Normal – 1000 ações por processador virtual
    • Alta – 2000 ações por processador virtual
    • Personalizada – definir um valor personalizado

    Quanto maior o valor de Ações, maior a quantidade de recursos de CPU provisionados para uma VM dentro de um host ESXi ou pool de recursos.

  9. Virtualização de hardware. Marque esta caixa de seleção para habilitar a virtualização aninhada. Esta opção é útil se você deseja executar uma VM dentro de uma VM para fins de teste ou educacionais.
  10. Contadores de desempenho. Essa funcionalidade é usada para permitir que um aplicativo instalado dentro da máquina virtual seja depurado e otimizado após medir o desempenho da CPU.
  11. Afinidade de agendamento. Essa opção é usada para atribuir uma VM a um processador específico. O valor inserido pode ser assim: “0, 2, 4-7”.
  12. I/O MMU. This feature allows VMs to have direct access to hardware input/output devices such as storage controllers, network cards, and graphic cards (rather than using emulated or paravirtualized devices). I/O MMU is also called Intel Virtualization Technology for Directed I/O (Intel VT-d) and AMD I/O Virtualization (AMD-V). I/O MMU is disabled by default. Using this option is deprecated in vSphere 7.0. If I/O MMU is enabled for a VM, the VM cannot be migrated with vMotion and is not compatible with snapshots, memory overcommit, suspended VM state, physical NIC sharing, and NSX network virtualization.

Se você usar um host ESXi autônomo e usar o Cliente Host VMware para configurar VMs em um navegador da web, o princípio de configuração é o mesmo do Cliente VMware vSphere.

Configurando Núcleos por CPU no VMware Workstation

Se você se conectar ao vCenter Server ou ao host ESXi no VMware Workstation e abrir as configurações da VM de uma VM vSphere, poderá editar a configuração básica dos processadores virtuais.

  1. Clique em VM > Configurações, selecione a aba Hardware e clique em Processadores.
  2. Selecione o número de processadores virtuais (sockets) e o número de núcleos por processador.

Na captura de tela a seguir, você vê a configuração do processador para a mesma VM Ubuntu que foi configurada anteriormente no Cliente vSphere.

O número total de núcleos do processador (núcleos lógicos dos processadores físicos em um host ou cluster ESXi) é calculado e exibido automaticamente abaixo. Em comparação, na interface do Cliente vSphere, você define o número total de núcleos do processador (a opção CPUs), seleciona o número de núcleos por processador e, em seguida, o número de sockets virtuais é calculado e exibido.Configurando Processadores de VM no PowerCLI

Configurando Processadores VM no PowerCLI

Se você prefere usar a interface de linha de comando para configurar componentes do VMware vSphere, use PowerCLI para editar a configuração de CPU das VMs. Vamos descobrir como editar a configuração de CPU de uma VM que é Ubuntu 19 no PowerCLI. Os comandos são usados para VMs que estão desligadas.

  1. Para configurar uma VM para usar dois processadores virtuais de um núcleo (dois soquetes virtuais são usados), use o comando:

    get-VM -name Ubuntu19 | set-VM -NumCpu 2

    Digite outro número se você quiser definir outro número de processadores (soquetes) para uma VM.

  2. No exemplo a seguir, você vê como configurar uma VM para usar dois processadores virtuais de dois núcleos (2 soquetes são usados):

    $VM=Get-VM -Name Ubuntu19

    $VMSpec=New-Object -Type VMware.Vim.VirtualMachineConfigSpec -Property @{ "NumCoresPerSocket" = 2}

    $VM.ExtensionData.ReconfigVM_Task($VMSpec)

    $VM | Set-VM -NumCPU 2

  • Uma vez que uma nova configuração de CPU é aplicada à máquina virtual, essa configuração é salva no arquivo de configuração VMX da VM. No nosso caso, verificamos o arquivo Ubuntu19.vmx localizado no diretório da VM no datastore (/vmfs/volumes/datastore2/Ubuntu19/). As linhas com nova configuração de CPU estão localizadas no final do arquivo VMX.

    numvcpus = “2”

    cpuid.coresPerSocket = “2”

  1. Se precisar reduzir o número de processadores (sockets) para uma VM, use o mesmo comando como mostrado anteriormente com uma quantidade menor. Por exemplo, para definir um processador (socket) para uma VM, use este comando:

    get-VM -name Ubuntu19 | set-VM -NumCpu 1

A principal vantagem de usar o PowerCLI é a capacidade de configurar várias VMs em massa. Automação de tarefas é importante e conveniente se o número de máquinas virtuais a serem configuradas for alto. Use os cmdlets VMware e a sintaxe do PowerShell da Microsoft para criar scripts.

Conclusão

O desempenho de aplicativos em execução em uma VM depende da configuração correta de CPU e memória. No VMware vSphere 6.5 e em versões posteriores, defina mais núcleos na CPU para máquinas virtuais e use a abordagem de núcleos de CPU por soquete. Se você usar versões do vSphere anteriores a 6.5, configure o número de soquetes sem aumentar o número de núcleos de CPU para uma VM devido ao comportamento diferente do vNUMA em versões mais recentes e antigas do vSphere. Tenha em mente o modelo de licenciamento do software que você precisa instalar em uma VM. Se o software for licenciado por CPU, configure mais núcleos por CPU nas configurações da VM.

Ao usar máquinas virtuais no VMware vSphere, não se esqueça de usar ferramentas de backup do VMware. Use o NAKIVO Backup & Replication para fazer backup de suas máquinas virtuais, incluindo VMs que têm múltiplos núcleos por CPU. O backup regular ajuda a proteger seus dados e recuperar os dados em caso de desastre.

Source:
https://www.nakivo.com/blog/the-number-of-cores-per-cpu-in-a-virtual-machine/