A multithreading simultânea (SMT), conhecida 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 multithread de hardware único e duas vCPUs partilham cada núcleo da CPU física por predefinição.
O Compute Engine permite-lhe definir manualmente o valor do número de threads por núcleo. Por exemplo, as cargas de trabalho com as seguintes preocupações podem beneficiar da desativação da SMT (definindo o número de threads por núcleo como 1):
- Desempenho: reduzir o número de threads executados em cada núcleo da CPU física pode ajudar a melhorar o desempenho das cargas de trabalho altamente paralelas ou que realizam cálculos de vírgula flutuante. 
- Segurança: se uma MV executar código não fidedigno, a redução do número de threads por núcleo pode ajudar a mitigar vulnerabilidades da CPU, como a amostragem de dados microarquitetónicos. 
- Licenciamento: alguns contratos de licenciamento têm requisitos relacionados com o número de CPUs virtuais que consome. Reduzir o número de threads por núcleo de 2 para 1 pode reduzir os custos de licenciamento. Para mais informações, consulte o seu contrato de licenciamento. 
Para muitas tarefas de computação geral ou tarefas que requerem muitas E/S, a SMT pode aumentar significativamente o débito da aplicação. Para tarefas com restrições de computação em que ambos os núcleos virtuais têm restrições de computação, a SMT pode prejudicar o desempenho geral da aplicação e adicionar uma variação imprevisível às tarefas. Neste caso, desativar a SMT permite um desempenho mais previsível e pode diminuir os tempos de execução.
Limitações
- 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 H4D
- 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 com menos de 2 vCPUs, por exemplo, n1-standard-1
- Tipos de máquinas com núcleo partilhado, como e2-small.
 
- Para instâncias bare metal, o número de hyperthreads aos quais tem acesso é equivalente ao número de hyperthreads na máquina. 
- Na Google Cloud consola, quando o número de threads por núcleo está definido como 1, a métrica de utilização da CPU só pode ser dimensionada até um máximo de 50%. Quando o número de threads por núcleo está definido como 2, a métrica de utilização da CPU pode aumentar até 100%. 
Preços
A faturação é feita com base no número de vCPUs definidas pelo tipo de máquina de uma VM e não no número de threads executados em cada núcleo. Por exemplo, o n2-standard-8
tipo de máquina pode executar até 8 vCPUs, que correspondem a 2 vCPUs para cada um dos 4 núcleos
físicos da CPU. Se, com o tipo de máquina n2-standard-8, decidir executar apenas 1 thread por núcleo, ou seja, 4 vCPUs, continua a receber faturação por 8 vCPUs. Para mais informações sobre a faturação de VMs, consulte os preços das instâncias de VM.
Altere 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 a Google Cloud consola, a CLI gcloud ou a API Compute Engine.
Autorizações necessárias para esta tarefa
Para realizar esta tarefa, tem de ter as seguintes autorizações:
- Todas as autorizações necessárias para criar uma nova VM
Consola
Para alterar o número de threads por núcleo durante a criação da VM, use o seguinte Google Cloud procedimento da consola:
- Na Google Cloud consola, aceda à página Criar uma instância. 
- No campo Nome, introduza 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 suportado. 
- Clique em Configurações avançadas para expandir a secção. 
- Em vCPUs to core ratio, escolha o número de threads por núcleo. 
- Conclua a configuração de outras definições para a MV 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 comandos 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 para a nova VM. Tem de ser um tipo de máquina com 2 ou mais vCPUs.
- THREADS_PER_CORE: o número de threads por núcleo físico. Defina como 2ou1.
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
Deve 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
REST
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 do pedido, 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 para a nova VM. Tem de ser um tipo de máquina com 2 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 2ou1.
Método HTTP e URL:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
Corpo JSON do pedido:
{
  "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 o seu pedido, expanda uma destas opções:
Deve receber uma resposta JSON semelhante à seguinte:
{
  "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"
}
Altere o número de threads por núcleo numa VM
Para alterar o número de threads por núcleo numa VM, use a Google Cloud consola, a CLI gcloud ou a API Compute Engine.
Autorizações necessárias para esta tarefa
Para realizar esta tarefa, tem de ter as seguintes autorizações:
- 
    compute.instances.getno projeto
- 
    compute.instances.updateno projeto
Consola
Para alterar o número de threads por núcleo numa VM existente, use o seguinte Google Cloud procedimento da consola:
- Na Google Cloud consola, aceda à página Instâncias de VM. 
- Clique no Nome da VM. 
- Clique em Parar para parar a VM. Se não existir a opção Parar, clique em Mais ações > Parar. 
- Clique em Edit. 
- Clique em Configurações avançadas para expandir a secção. 
- Na lista pendente vCPUs to core ratio, escolha o número de threads por núcleo. 
- Clique em Guardar. 
gcloud
Para alterar o número de threads por núcleo numa VM existente, faça o seguinte:
- Exporte as propriedades da VM através do seguinte - gcloud compute instances exportcomando:- gcloud compute instances export VM_NAME \ --destination=YAML_FILE_PATH \ --zone=ZONE- Substitua o seguinte: - VM_NAME: o nome da VM a partir da qual exportar propriedades
- YAML_FILE_PATH: o caminho e o nome do ficheiro de um ficheiro YAML no qual guardar os dados de configuração exportados
- ZONE: a zona que contém a VM
 
- No ficheiro de configuração da VM que foi guardado em FILE_PATH, atualize o valor de - threadsPerCore. Se o valor não estiver no ficheiro, adicione o seguinte:- advancedMachineFeatures: threadsPerCore: THREADS_PER_CORE 
- Atualize a VM com a nova contagem de threads por núcleo através do 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 atualizar
- FILE_PATH: o caminho para o ficheiro de configuração da VM atualizado
- ZONE: a zona que contém a VM a atualizar
 
REST
Para alterar o número de threads por núcleo numa VM existente, use o instances.updatemétodo seguinte:
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 projeto
- ZONE: a zona que contém a VM
- VM_NAME: o nome da VM a partir da qual exportar propriedades
- THREADS_PER_CORE: o número de discussões por núcleo
Veja o número de threads por núcleo
Para ver o número de threads por núcleo, use o procedimento que corresponde ao SO em execução na VM.
Linux
Para ver o número de threads por núcleo em VMs baseadas em Linux, use o seguinte procedimento:
- Execute o comando - lscpu.- lscpu 
- Reveja a saída para ver o número de threads por núcleo. - Na seguinte saída de amostra de uma máquina - n2-standard-16, o valor do número de threads por núcleo é- 1, conforme mostrado na linha- Thread(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 ver 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}}
- Reveja a saída para ver o número de threads por núcleo. - Na seguinte saída de amostra de uma máquina - n2-standard-16, o valor do número de threads por núcleo é- 1, conforme mostrado na coluna- Thread(s) per core.- NumberOfCores Thread(s) per core ------------- ------------------ 8 1
O que se segue?
- Saiba mais sobre os sistemas operativos que pode executar em VMs do Compute Engine.