O multithreading simultâneo (SMT), conhecido nos processadores Intel como tecnologia Hyper-Threading (HTT), permite que um núcleo da CPU seja executado como dois multithreads de hardware. No Compute Engine, cada CPU virtual (vCPU) é implementada como um único multithread de hardware, e duas vCPUs compartilham cada núcleo de CPU física por padrão.
O Compute Engine permite definir manualmente o valor do número de threads por núcleo. Por exemplo, cargas de trabalho com as seguintes preocupações podem se beneficiar com a desativação do SMT (definindo o número de threads por núcleo como 1):
Desempenho: reduzir o número de threads executados em cada núcleo físico da CPU pode ajudar a melhorar o desempenho de cargas de trabalho altamente paralelas ou que executam cálculos de ponto flutuante.
Segurança: se uma VM executar código não confiável, reduzir o número de threads por núcleo pode ajudar a mitigar vulnerabilidades de CPU, como amostragem de dados microarquitetônicos .
Licenciamento: alguns contratos de licenciamento têm requisitos relacionados ao número de vCPUs que você consome. Reduzir o número de threads por núcleo de 2 para 1 pode reduzir os custos de licenciamento. Para obter mais informações, consulte seu contrato de licenciamento.
Para muitas tarefas gerais de computação ou tarefas que exigem muita E/S, o SMT pode aumentar significativamente o rendimento do aplicativo. Para trabalhos vinculados à computação em que ambos os núcleos virtuais estão vinculados à computação, o SMT pode prejudicar o desempenho geral do aplicativo e adicionar variações imprevisíveis aos trabalhos. Neste caso, desligar o SMT permite um desempenho mais previsível e pode diminuir o tempo de trabalho.
Limitações
Você não pode definir o número de threads por núcleo em VMs para os seguintes tipos de máquinas:
- Todos os tipos de máquinas C4A
- Todos os tipos de máquinas H3
- Todos os tipos de máquinas Tau T2A
- Todos os tipos de máquinas Tau T2D
- Tipos de máquinas que têm menos de duas vCPUs, por exemplo,
n1-standard-1
- Tipos de máquinas com núcleo compartilhado , como
e2-small
.
Para instâncias bare metal C3 e X4, o número de hyperthreads aos quais você tem acesso é equivalente ao número de hyperthreads na máquina.
No console do Google Cloud, quando o número de threads por núcleo é definido como 1, a métrica de utilização da CPU só pode escalar até um máximo de 50%. Quando o número de threads por núcleo é definido como 2, a métrica de utilização da CPU pode escalar até 100%.
Preços
Você será cobrado pelo número de vCPUs definidas pelo tipo de máquina de uma VM, e não pelo número de threads executados em cada núcleo. Por exemplo, o tipo de máquina n2-standard-8
pode executar até 8 vCPUs, ou seja, 2 vCPUs para cada um dos 4 núcleos físicos da CPU. Se, com o tipo de máquina n2-standard-8
, você decidir executar apenas 1 thread por núcleo (efetivamente 4 vCPUs), você ainda será cobrado por 8 vCPUs. Para obter mais informações sobre como você é cobrado pelas VMs, consulte Preços de instâncias de VM .
Alterar o número de threads por núcleo durante a criação da VM
Para alterar o número de threads por núcleo durante a criação da VM, use o console do Google Cloud, a CLI gcloud ou a API Compute Engine.
Permissões necessárias para esta tarefa
Para executar esta tarefa, você deve ter as seguintes permissões :
- Todas as permissões necessárias para criar uma nova VM
Console
Para alterar o número de threads por núcleo durante a criação da VM, use o seguinte procedimento do console do Google Cloud:
No console do Google Cloud, acesse a página Criar uma instância .
No campo Nome , insira um nome para a VM.
Escolha uma região e uma zona para a VM.
Escolha uma família de máquinas e um tipo de máquina compatível.
Clique em Configurações avançadas para expandir a seção.
Em vCPUs to core ratio , escolha o número de threads por núcleo.
Conclua a definição de outras configurações para a VM e clique em Criar .
gcloud
Para alterar o número de threads por núcleo durante a criação da VM, use o comando gcloud compute instances create
.
Antes de usar qualquer um dos dados de comando abaixo, faça as seguintes substituições:
- VM_NAME : o nome da nova VM.
- ZONE : a zona da nova VM.
- MACHINE_TYPE : o tipo de máquina da nova VM. Deve ser um tipo de máquina com duas ou mais vCPUs.
- THREADS_PER_CORE : o número de threads por núcleo físico. Defina como
2
ou1
.
Execute o seguinte comando:
Linux, macOS ou Cloud Shell
gcloud compute instances create VM_NAME \ --zone=ZONE \ --machine-type=MACHINE_TYPE \ --threads-per-core=THREADS_PER_CORE
Windows (PowerShell)
gcloud compute instances create VM_NAME ` --zone=ZONE ` --machine-type=MACHINE_TYPE ` --threads-per-core=THREADS_PER_CORE
Windows (cmd.exe)
gcloud compute instances create VM_NAME ^ --zone=ZONE ^ --machine-type=MACHINE_TYPE ^ --threads-per-core=THREADS_PER_CORE
Você deverá receber uma resposta semelhante à seguinte:
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME]. NAME: VM_NAME ZONE: ZONE MACHINE_TYPE: MACHINE_TYPE PREEMPTIBLE: INTERNAL_IP: EXTERNAL_IP EXTERNAL_IP: INTERNAL_IP STATUS: RUNNING
DESCANSAR
Para alterar o número de threads por núcleo durante a criação da VM, use o método instances.insert
com o campo threadsPerCore
.
Antes de usar qualquer um dos dados da solicitação, faça as seguintes substituições:
- PROJECT_ID : o ID do projeto.
- ZONE : a zona da nova VM.
- MACHINE_TYPE : o tipo de máquina da nova VM. Deve ser um tipo de máquina com duas ou mais vCPUs.
- VM_NAME : o nome da nova VM.
- THREADS_PER_CORE : o número de threads por núcleo físico. Defina como
2
ou1
.
Método HTTP e URL:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
Solicitar corpo JSON:
{ "machineType": "projects/PROJECT_ID/zones/ZONE/machineTypes/MACHINE_TYPE", "name": "VM_NAME", "advancedMachineFeatures": { "threadsPerCore": THREADS_PER_CORE }, "disks": [ { "type": "PERSISTENT", "boot": true, "initializeParams": { "sourceImage": "projects/debian-cloud/global/images/family/debian-11" } } ], "networkInterfaces": [ { "network": "global/networks/default" } ] }
Para enviar sua solicitação, expanda uma destas opções:
Você deverá receber uma resposta JSON semelhante a esta:
{ "kind": "compute#operation", "id": "7334609091572405391", "name": "operation-1663806045894-5e939085735d8-7499db32-c12fcc03", "zone": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE", "operationType": "insert", "targetLink": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME", "targetId": "1226375378512516273", "status": "RUNNING", "user": "EMAIL_ADDRESS", "progress": 0, "insertTime": "2022-09-21T17:20:48.751-07:00", "startTime": "2022-09-21T17:20:48.751-07:00", "selfLink": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/operations/operation-1663806045894-5e939085735d8-7499db32-c12fcc03" }
Alterar o número de threads por núcleo em uma VM
Para alterar o número de threads por núcleo em uma VM, use o console do Google Cloud, a CLI gcloud ou a API Compute Engine.
Permissões necessárias para esta tarefa
Para executar esta tarefa, você deve ter as seguintes permissões :
-
compute.instances.get
no projeto -
compute.instances.update
no projeto
Console
Para alterar o número de threads por núcleo em uma VM existente, use o seguinte procedimento do console do Google Cloud:
No console do Google Cloud, acesse a página de instâncias de VM .
Clique no nome da VM.
Se o status da VM for Running , clique em Stop .
Clique em Editar .
Clique em Configurações avançadas para expandir a seção.
Na lista suspensa proporção de vCPUs para núcleo , escolha o número de threads por núcleo.
Clique em Salvar .
gcloud
Para alterar o número de threads por núcleo em uma VM existente, faça o seguinte:
Exporte as propriedades da VM usando o seguinte comando
gcloud compute instances export
:gcloud compute instances export VM_NAME \ --destination=YAML_FILE_PATH \ --zone=ZONE
Substitua o seguinte:
VM_NAME
: o nome da VM da qual exportar propriedadesYAML_FILE_PATH
: o caminho e o nome do arquivo .yaml no qual salvar os dados de configuração exportadosZONE
: a zona que contém a VM
No arquivo de configuração da VM que foi salvo em FILE_PATH , atualize o valor de
threadsPerCore
. Se o valor não estiver no arquivo, adicione o seguinte:advancedMachineFeatures: threadsPerCore: THREADS_PER_CORE
Atualize a VM com a nova contagem de threads por núcleo usando o seguinte comando
gcloud compute instances update-from-file
:gcloud compute instances update-from-file VM_NAME \ --source=FILE_PATH \ --most-disruptive-allowed-action=RESTART \ --zone=ZONE
Substitua o seguinte:
VM_NAME
: o nome da VM a ser atualizadaFILE_PATH
: o caminho para o arquivo de configuração da VM atualizadoZONE
: a zona que contém a VM a ser atualizada
DESCANSAR
Para alterar o número de threads por núcleo em uma VM existente, use o seguinte método instances.update
:
PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME?most_disruptive_allowed_action=RESTART { ... "advanced_machine_features": { ... "threadsPerCore": "THREADS_PER_CORE" }, ... }
Substitua o seguinte:
PROJECT_ID
: o ID do projetoZONE
: a zona que contém a VMVM_NAME
: o nome da VM da qual exportar propriedadesTHREADS_PER_CORE
: o número de threads por núcleo
Veja o número de threads por núcleo
Para visualizar o número de threads por núcleo, use o procedimento que corresponde ao sistema operacional em execução na VM.
Linux
Para visualizar o número de threads por núcleo em VMs baseadas em Linux, use o seguinte procedimento:
Execute o comando
lscpu
.lscpu
Revise a saída para visualizar o número de threads por núcleo.
No exemplo de saída a seguir de uma máquina
n2-standard-16
, o valor para o número de threads por núcleo é1
, conforme mostrado na linhaThread(s) per core
.... CPU(s): 8 On-line CPU(s) list: 0-7 Thread(s) per core: 1 Core(s) per socket: 8 Socket(s): 1 NUMA node(s): 1 Vendor ID: GenuineIntel CPU family: 6 Model: 85 Model name: Intel(R) Xeon(R) CPU @ 2.80GHz ...
Windows
Para visualizar o número de threads por núcleo em VMs baseadas no Windows, use o seguinte procedimento:
Inicie o Powershell.
Execute o seguinte comando.
Get-WmiObject -Class Win32_processor | Select-Object NumberOfCores, @{Name="Thread(s) per core";Expression={$_.NumberOfLogicalProcessors/$_.NumberOfCores}}
Revise a saída para visualizar o número de threads por núcleo.
No exemplo de saída a seguir de uma máquina
n2-standard-16
, o valor para o número de threads por núcleo é1
, conforme mostrado na colunaThread(s) per core
.NumberOfCores Thread(s) per core ------------- ------------------ 8 1
O que vem a seguir
- Saiba mais sobre os sistemas operacionais que podem ser executados nas VMs do Compute Engine .