Configurar várias linhas de execução simultâneas (SMT, na sigla em inglês)


Nesta página, mostramos como configurar várias linhas de execução simultâneas nos clusters do Google Kubernetes Engine (GKE).

Visão geral

Os nós do GKE são instâncias de máquina virtual (VM) do Compute Engine que o GKE cria em seu nome. Nessas VMs, é comum ter a opção de várias linhas de execução simultâneas (SMT, na sigla em inglês) ativada por padrão. SMT é a capacidade de executar várias linhas de execução independentes em um único núcleo físico de CPU. Com a SMT ativada, um único núcleo físico pode executar duas CPUs virtuais (vCPUs) como linhas de execução independentes e separadas. Por exemplo, um nó n2-standard-32 do GKE está, na verdade, executando 32 vCPUs em 16 núcleos de CPU física.

Com a introdução da configurabilidade do SMT nos nós do GKE, agora é possível configurar o SMT para que o número de vCPUs efetivas seja igual ao número de núcleos físicos, o que significa que os nós do GKE podem usar o núcleo físico completo por vCPU.

Vantagens

A configuração de SMT no GKE oferece os seguintes benefícios.

Desempenho aprimorado

Algumas cargas de trabalho de Computação de alto desempenho (HPC, na sigla em inglês) podem melhorar o desempenho desativando a SMT. Normalmente, para muitas tarefas de computação gerais ou que exigem muita E/S, a SMT pode aumentar significativamente a capacidade do aplicativo. Por outro lado, para jobs vinculados à computação em que os dois núcleos virtuais são vinculados à computação, a SMT pode prejudicar o desempenho geral do aplicativo e adicionar uma variação não determinística aos jobs. Portanto, com a SMT desativada, alguns aplicativos de HPC podem ter um desempenho melhor e mais previsível.

Redução nos custos de licenciamento

Alguns contratos de licenciamento de software têm modelos de faturamento vinculados ao número de vCPUs consumidos. Ao desativar a SMT, o número de vCPUs de cada núcleo é reduzido pela metade. Isso pode reduzir os custos de licenciamento. Para mais informações, consulte seu contrato de licenciamento.

Consulte a seção de preços para entender como o Google Cloud cobra quando a SMT está configurada.

Limitações

  • Tipos de máquina: a SMT não é configurável nos tipos de máquinas com menos de duas vCPUs (por exemplo, n1-standard-1) ou no Tipo de máquina Tau T2D.
  • Provisionamento automático de nós: a configuração da SMT não é compatível com clusters que têm o provisionamento automático de nós ativado.
  • Escalonador automático de cluster: o escalonamento a partir de zero nós com configurabilidade de SMT só é compatível com o escalonador automático de cluster para clusters que executam o GKE versão 1.21 ou posterior.
  • GKE Sandbox: é possível definir configurações de SMT em nós do GKE Sandbox em clusters do GKE Standard versão 1.24.2-gke.300 e posterior usando a sinalização --threads-per-core e, nas versões anteriores, usando um DaemonSet independente. Para instruções, consulte o GKE Sandbox. Como as várias linhas de execução são desativadas por padrão no Sandbox do GKE antes da versão 1.24.2-gke.300, não é possível configurar SMT usando threads-per-core. Se você usa o GKE Sandbox e quer ativar a SMT, consulte A SMT pode estar desativada.
  • Modo de cluster: a configurabilidade da SMT não é compatível com clusters do Autopilot do GKE.

Preços

A SMT para GKE é faturada com base nos preços do Compute Engine para SMT. Você é cobrado pelo número de vCPUs definidas pelo tipo de máquina de uma VM, não pelo número de linhas de execução executadas em cada núcleo. Mesmo que você configure a SMT, continuará recebendo cobranças pelo número padrão de vCPUs definido pelo tipo de máquina da VM. Para mais informações sobre como você é cobrado pelas VMs, consulte Preços de instâncias de VM.

Por exemplo, um nó do GKE criado usando o tipo de máquina n2-standard-8 é executado com SMT ativada por padrão e pode executar até 8 vCPUs, ou seja, 2 vCPUs para cada um dos quatro núcleos de CPU física. Se você configurar o SMT para usar apenas uma linha de execução por núcleo (efetivamente quatro vCPUs), ainda assim serão cobradas oito vCPUs.

Configurar SMT

Configure a SMT em novos clusters ou pools de nós especificando o número de linhas de execução por núcleo.

A tabela a seguir mostra os valores possíveis para linhas de execução por núcleo e o comportamento SMT correspondente para o nó:

Linhas de execução por núcleo Comportamento de SMT
null (não especificado) Padrão da VM do Compute Engine
0 Inválida
1 SMT desativada
2 SMT ativada
> 2 Inválida

Configurar o SMT em um novo cluster

É possível configurar o SMT em novos clusters usando a CLI gcloud ou o console do Google Cloud.

gcloud

Para configurar a SMT, execute o seguinte comando:

gcloud container clusters create CLUSTER_NAME \
    --machine-type=MACHINE_TYPE \
    --threads-per-core=THREADS_PER_CORE

Substitua:

  • CLUSTER_NAME: o nome do novo cluster.
  • MACHINE_TYPE: o tipo de máquina a ser usado nos nós do GKE. Precisa ser um tipo de máquina com duas ou mais vCPUs.
  • THREADS_PER_CORE: o número de linhas de execução visíveis por núcleo físico. A tabela anterior mostra os valores que você pode especificar.

Para ver a lista completa de opções, consulte a documentação do gcloud container clusters create.

Console

  1. Acesse a página Google Kubernetes Engine no console do Google Cloud.

    Acessar o Google Kubernetes Engine

  2. Clique em Criar.

  3. Na caixa de diálogo Criar cluster, ao lado de GKE Standard, clique em Configurar.

  4. No menu de navegação, na seção Pools de nós, clique no nome de um pool de nós e, em seguida, clique em Nós.

  5. Na seção Configuração da máquina, selecione um Tipo de máquina compatível, como e2-standard-2.

  6. Clique em Plataforma de CPU e GPU.

  7. No menu suspenso proporção de vCPUs por núcleo, selecione uma das seguintes opções:

    • 1 vCPU por núcleo: desative a SMT.
    • 2 vCPUs por núcleo: mantenha o SMT ativado.
  8. Configure os pools de nós e de cluster conforme necessário e clique em Criar.

Configurar SMT em um novo pool de nós

É possível configurar o SMT em novos pools de nós usando a CLI gcloud ou o console do Google Cloud.

gcloud

Para configurar a SMT, execute o seguinte comando:

gcloud container node-pools create POOL_NAME \
    --cluster=CLUSTER_NAME \
    --machine-type=MACHINE_TYPE \
    --threads-per-core=THREADS_PER_CORE

Substitua:

  • POOL_NAME: o nome do novo pool de nós.
  • CLUSTER_NAME: o nome do cluster existente.
  • MACHINE_TYPE: o tipo de máquina a ser usado nos nós do GKE. Precisa ser um tipo de máquina com duas ou mais vCPUs.
  • THREADS_PER_CORE: o número de linhas de execução visíveis por núcleo físico. A tabela anterior mostra os valores que você pode especificar.

Para ver a lista completa de opções, consulte a documentação do gcloud container clusters create.

Console

  1. Acesse a página Google Kubernetes Engine no console do Google Cloud.

    Acessar o Google Kubernetes Engine

  2. Clique no nome do cluster que você quer modificar.

  3. Clique em Adicionar pool de nós.

  4. No menu de navegação, clique em Nós.

  5. Na seção Configuração da máquina, selecione uma Família de máquinas e umTipo de máquina compatíveis com SMT, como n2-standard-2.

  6. Clique em Plataforma de CPU e GPU.

  7. No menu suspenso proporção de vCPUs por núcleo, selecione uma das seguintes opções:

    • 1 vCPU por núcleo: desative a SMT.
    • 2 vCPUs por núcleo: mantenha o SMT ativado.
  8. Configure o pool de nós conforme necessário e clique em Criar.

Verificar a configuração do SMT

Linux

Para verificar a configuração da SMT em nós do Linux, siga estas etapas:

  1. Use SSH para acessar o nó:

    gcloud compute ssh NODE_NAME
    

    Substitua NODE_NAME pelo nome do seu nó.

  2. Verifique o número de vCPUs:

    cat /proc/cpuinfo | grep processor | wc -l
    

    A saída será assim:

    16
    

    Se você definir o número de linhas de execução por núcleo como 1, a saída mostrará metade do número padrão de VMs do Compute Engine. Por exemplo, a saída do n2-standard-32 com SMT desativado precisa ser 16 em vez do valor padrão 32.

Windows

Para verificar a configuração da SMT nos nós do Windows, execute as seguintes etapas:

  1. Defina um nome de usuário e uma senha como RDP para o nó:

    gcloud compute reset-windows-password NODE_NAME
    

    Substitua NODE_NAME pelo nome do seu nó.

  2. Estabeleça uma conexão com EXTERNAL_IP:3389 para a VM.

  3. Execute o seguinte comando do PowerShell:

    Get-WmiObject -Class Win32_Processor -ComputerName. | Select-Object -Property [a-z]* | Select NumberOfCores,NumberOfLogicalProcessors
    

    Se você definir o número de linhas de execução por núcleo como 1, o valor NumberOfCores precisará ser igual ao valor NumberOfLogicalProcessors, como no exemplo de saída a seguir:

    Output (example n1-standard-2 with SMT off)
    
    NumberOfCores NumberOfLogicalProcessors
    ------------- -------------------------
                1                         1
    

A seguir