A multissegmentação simultânea (SMT, na sigla em inglês), conhecida por processadores Intel como Hyper-Threading Technology (HTT), permite que um núcleo de CPU seja executado como duas multilinhas de execução de hardware. No Compute Engine, cada CPU virtual (vCPU, na sigla em inglês) é implementada como uma única multilinha de execução de hardware, e duas vCPUs compartilham cada núcleo de CPU física por padrão.
O Compute Engine permite que você defina manualmente o valor do número de linhas de execução por núcleo. Por exemplo, as cargas de trabalho com as seguintes questões podem se beneficiar da desativação de SMT (configuração do número de linhas de execução por núcleo para 1):
Performance Reduzir o número de linhas de execução executadas em cada núcleo de CPU física pode ajudar a melhorar o desempenho de cargas de trabalho altamente paralelas ou que realizam cálculos de pontos flutuantes.
Segurança se uma VM executa um código não confiável, reduzir do número de linhas de execução por núcleo pode ajudar a reduzir as vulnerabilidades da CPU, como a amostragem de dados de microarquitetura (em inglês).
Licenciamento: alguns contratos de licenciamento têm requisitos relacionados ao número de vCPUs que você consome. Reduzir o número de linhas de execução por núcleo de 2 para 1 pode reduzir os custos de licenciamento. Para mais informações, consulte seu contrato de licenciamento.
Para muitas tarefas de computação gerais ou tarefas que exigem muita E/S, o SMT pode aumentar significativamente a capacidade de processamento. Para jobs vinculados à computação em que ambos os núcleos virtuais são vinculados à computação, o SMT pode dificultar o desempenho geral do aplicativo e adicionar variância imprevisível aos jobs. Nesse caso, a desativação do SMT permite um desempenho mais previsível e pode diminuir os tempos de job.
Limitações
Não é possível definir o número de linhas de execução por núcleo em VMs para os seguintes tipos de máquina:
- Todos os tipos de máquina H3
- Todos os tipos de máquina Tau T2A
- Todos os tipos de máquina Tau T2D
- Tipos de máquina com menos de duas vCPUs, por exemplo,
n1-standard-1
- Tipos de máquina com núcleo compartilhado, como
e2-small
.
Para instâncias bare metal C3 e X4, o número de hiperthreads a que você tem acesso é equivalente ao número de hiperthreads na máquina.
No console do Google Cloud, quando o número de linhas de execução por núcleo é definido como 1, a métrica de utilização da CPU só pode ser escalonada até no máximo 50%. Quando o número de linhas de execução por núcleo é definido como 2, a métrica de utilização da CPU pode ser escalonada até 100%.
Preços
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. Por exemplo, o tipo de
máquina n2-standard-8
pode executar até oito vCPUs, o que é duas vCPUs para cada um dos quatro núcleos da CPU
física. Se, com o tipo de máquina n2-standard-8
, você decidir executar apenas uma linha de execução por núcleo (efetivamente quatro vCPUs), ainda assim, receberá cobranças pelas oito vCPUs. Para mais informações sobre como você
é cobrado pelas VMs, consulte Preços de instâncias de VM.
Alterar o número de linhas de execução por núcleo durante a criação da VM
Para alterar o número de linhas de execução 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 exigidas para a tarefa
Para executar esta tarefa, é preciso ter a permissão a seguir:
- Todas as permissões necessárias para criar uma nova VM
Console
Para alterar o número de linhas de execução 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 para proporção de núcleo, escolha o número de linhas de execução por núcleo.
Conclua a definição de outras configurações da VM e clique em Criar.
gcloud
Para alterar o número de linhas de execução por núcleo durante a criação da VM, use o seguinte comando gcloud compute instances create
:
Antes de usar os dados do comando abaixo, faça estas substituições:
- VM_NAME: o nome da nova VM.
- ZONE: a zona da nova VM.
- MACHINE_TYPE: tipo de máquina para a nova VM. 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. 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ê receberá uma resposta semelhante a esta:
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 linhas de execução por núcleo durante a criação da VM, use o
método
instances.insert
com o
campo threadsPerCore
.
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
- PROJECT_ID: o ID do projeto;
- ZONE: a zona da nova VM.
- MACHINE_TYPE: tipo de máquina para a nova VM. Precisa 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 linhas de execução visíveis 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
Corpo JSON da solicitação:
{ "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 a solicitação, expanda uma destas opções:
Você 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 linhas de execução por núcleo em uma VM
Para alterar o número de linhas de execução por núcleo em uma VM, use o console do Google Cloud, a CLI gcloud ou a API Compute Engine.
Permissões exigidas para a tarefa
Para executar esta tarefa, é preciso ter a permissão a seguir:
-
compute.instances.get
no projeto -
compute.instances.update
no projeto
Console
Para alterar o número de linhas de execução por núcleo em uma VM atual, use o seguinte procedimento do console do Google Cloud:
No console do Google Cloud, acesse a página Instâncias de VMs.
Clique no Nome da VM.
Se o Status da VM for Em execução, clique em Interromper.
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 linhas de execução por núcleo.
Clique em Salvar.
gcloud
Para alterar o número de linhas de execução por núcleo em uma VM atual, 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:
VM_NAME
: o nome da VM da qual as propriedades serão exportadasYAML_FILE_PATH
: o caminho e o nome de um arquivo .yaml em que os dados de configuração exportados serão salvosZONE
: 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 linhas de execução 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:
VM_NAME
: o nome da VM a ser atualizada.FILE_PATH
: o caminho para o arquivo de configuração da VM atualizado.ZONE
: a zona que contém a VM a ser atualizada.
REST
Para alterar o número de linhas de execução por núcleo em uma VM atual, 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:
PROJECT_ID
: o ID do projetoZONE
: a zona que contém a VM.VM_NAME
: o nome da VM da qual as propriedades serão exportadasTHREADS_PER_CORE
: o número de linhas de execução por núcleo
O número de linhas de execução por núcleo
Para visualizar o número de linhas de execução por núcleo, use o procedimento correspondente ao SO em execução na VM.
Linux
Para ver o número de linhas de execução por núcleo em VMs baseadas em Linux, use o seguinte procedimento:
Execute o comando
lscpu
.lscpu
Analise a saída para ver o número de linhas de execução por núcleo.
Na amostra de saída a seguir de uma máquina
n2-standard-16
, o valor para o número de linhas de execução 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 ver o número de linhas de execução por núcleo em VMs baseadas em Windows, use o seguinte procedimento:
Inicie o PowerShell.
Execute o comando a seguir.
Get-WmiObject -Class Win32_processor | Select-Object NumberOfCores, @{Name="Thread(s) per core";Expression={$_.NumberOfLogicalProcessors/$_.NumberOfCores}}
Analise a saída para ver o número de linhas de execução por núcleo.
Na amostra de saída a seguir de uma máquina
n2-standard-16
, o valor para o número de linhas de execução por núcleo é1
, conforme mostrado na colunaThread(s) per core
.NumberOfCores Thread(s) per core ------------- ------------------ 8 1
A seguir
- Saiba mais sobre os sistemas operacionais que podem ser executados em VMs do Compute Engine.