Personalize o número de núcleos da CPU visíveis

A personalização do número de núcleos de CPU visíveis pode oferecer um controlo detalhado sobre os custos de licenciamento, ao mesmo tempo que mantém o desempenho da rede e dos discos persistentes. Esta personalização reduz o número de vCPUs disponíveis para a instância de máquina virtual (VM). Não altera o tipo de máquina nem o preço.

O Compute Engine implementa cada CPU virtual (vCPU) como um único hardware multithread que é executado num núcleo da CPU física. Para reduzir o número de vCPUs que estão disponíveis para uma VM, o Compute Engine permite-lhe personalizar o número de núcleos de CPU visíveis.

Os núcleos visíveis são os núcleos do CPU no hardware subjacente que as suas VMs consomem. Por predefinição, o número de núcleos de CPU visíveis para uma VM é o número de vCPUs no tipo de máquina dividido pelo número de threads por núcleo:

  • Núcleos de CPU visíveis = vCPUs no tipo de máquina / threads por núcleo

Por exemplo, o tipo de máquina c2-standard-60 especifica 60 vCPUs. Partindo do princípio da predefinição de 2 threads por núcleo, o número de núcleos de CPU visíveis é 30. Se reduzir o número de núcleos visíveis de 30 para 20, o número de CPUs virtuais funcionais é reduzido de 60 para 40.

Pondere personalizar o número de núcleos da CPU visíveis se ambas as seguintes condições se aplicarem:

Antes de personalizar o número de vCPUs disponíveis para uma VM, considere primeiro usar um tipo de máquina personalizado.

Funções necessárias

Para receber as autorizações de que precisa para personalizar o número de núcleos do CPU visíveis, peça ao seu administrador para lhe conceder a função de administrador de instâncias do Compute (v1) (roles/compute.instanceAdmin.v1) do IAM no projeto. Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Esta função predefinida contém as autorizações necessárias para personalizar o número de núcleos do CPU visíveis. Para ver as autorizações exatas que são necessárias, expanda a secção Autorizações necessárias:

Autorizações necessárias

São necessárias as seguintes autorizações para personalizar o número de núcleos do CPU visíveis:

  • Para personalizar o número de núcleos da CPU visíveis durante a criação da VM:
    • compute.instances.create no projeto
    • Para usar uma imagem personalizada para criar a VM: compute.images.useReadOnly na imagem
    • Para usar um instantâneo para criar a VM: compute.snapshots.useReadOnly no instantâneo
    • Para usar um modelo de instância para criar a VM: compute.instanceTemplates.useReadOnly no modelo de instância
    • Para atribuir uma rede antiga à VM: compute.networks.use no projeto
    • Para especificar um endereço IP estático para a VM: compute.addresses.use no projeto
    • Para atribuir um endereço IP externo à VM quando usar uma rede antiga: compute.networks.useExternalIp no projeto
    • Para especificar uma sub-rede para a VM: compute.subnetworks.use no projeto ou na sub-rede escolhida
    • Para atribuir um endereço IP externo à VM quando usar uma rede VPC: compute.subnetworks.useExternalIp no projeto ou na sub-rede escolhida
    • Para definir os metadados da instância de VM para a VM: compute.instances.setMetadata no projeto
    • Para definir etiquetas para a VM: compute.instances.setTags na VM
    • Para definir etiquetas para a VM: compute.instances.setLabels na VM
    • Para definir uma conta de serviço para a VM usar: compute.instances.setServiceAccount na VM
    • Para criar um novo disco para a VM: compute.disks.create no projeto
    • Para anexar um disco existente no modo de leitura ou leitura/escrita: compute.disks.use no disco
    • Para anexar um disco existente no modo de leitura: compute.disks.useReadOnly no disco
  • Para personalizar o número de núcleos da CPU visíveis num grupo de VMs através de um modelo de instância: Precisa de todas as autorizações que usaria durante a criação da VM e a compute.instanceTemplates.create no projeto

Também pode conseguir estas autorizações com funções personalizadas ou outras funções predefinidas.

O número de vCPUs e o número de threads por núcleo

O número total de CPUs virtuais num tipo de máquina é o número de núcleos de CPU visíveis multiplicado pelo número de threads por núcleo. Para a maioria das séries de máquinas, o número de threads por núcleo é 2, mas pode definir manualmente o número de threads por núcleo como 1.

A tabela seguinte mostra a relação entre os núcleos da CPU visíveis, o número de threads por núcleo e o total de vCPUs disponíveis, usando o tipo de máquina c2-standard-60 como exemplo.

Tipo de máquina Núcleos de CPU visíveis Discussões por núcleo vCPUs disponíveis
c2-standard-60 30 (predefinição) 2 (predefinição) 60
c2-standard-60 30 (predefinição) 1 30
c2-standard-60 20 2 (predefinição) 40
c2-standard-60 20 1 20

Considerações sobre o desempenho

Esta secção explica como a redução do número de núcleos visíveis pode afetar o desempenho da sua MV.

Disco persistente

Os limites de desempenho dos discos persistentes dependem do tipo de máquina e não são afetados pelo número de núcleos de CPU visíveis. Para mais informações, consulte o artigo Desempenho do armazenamento de blocos.

Saída de rede

Os limites de largura de banda da saída de rede correspondem ao tipo de máquina e não são afetados pelo número de núcleos da CPU visíveis. No entanto, o desempenho da rede varia consoante o número de CPUs virtuais acessíveis à VM. Por exemplo, um tipo de máquina n2-standard-16 com um núcleo de CPU visível pode não conseguir usar totalmente uma ligação de 32 Gbps.

Preços

Esta secção explica como a redução do número de núcleos visíveis pode afetar o custo das suas VMs.

Custos de licenciamento do sistema operativo

Pode reduzir os custos de licenciamento de alguns sistemas operativos diminuindo o número de núcleos do processador visíveis. Os sistemas operativos aplicáveis são aqueles que lhe cobram por cada vCPU disponível para a VM; por exemplo, o Windows Server e o SQL Server. Para mais informações sobre as opções de licenciamento destes sistemas operativos no Compute Engine, consulte o artigo Licenças da Microsoft.

Custos, quota e capacidade das VMs

Os custos, a quota e a capacidade da VM permanecem os mesmos quando personaliza o número de núcleos do CPU visíveis, porque o Compute Engine cobra, acompanha a quota e atribui espaço nos tipos de máquinas para VMs como se estivessem a usar o número de núcleos do CPU do tipo de máquina. Para mais informações sobre a faturação de VMs do Compute Engine, consulte o artigo Preços das instâncias de VM.

Limitações

  • Não pode personalizar o número de núcleos do CPU visíveis enquanto uma VM estiver no estado RUNNING. Para mais informações sobre os estados das VMs, consulte o ciclo de vida da instância de VM.

  • Na Google Cloud consola, quando o número de núcleos visíveis é reduzido, a métrica de utilização da CPU não pode aumentar até 100%. Está limitada ao número de núcleos da CPU visíveis dividido pelo número máximo de núcleos da CPU.

  • Não pode usar esta funcionalidade para personalizar o número de núcleos do CPU visíveis para instâncias bare metal.

Tipos de máquinas suportados e valores válidos para cada um

Muitos tipos de máquinas suportam a personalização do número de núcleos de CPU visíveis. O valor da contagem de núcleos da CPU visíveis tem de ser um número inteiro. O valor máximo é o número de vCPUs, ou GPUs para tipos de máquinas otimizados para aceleradores, no tipo de máquina dividido pelo número de threads por núcleo para a VM.

A tabela seguinte mostra os tipos de máquinas que suportam esta personalização, juntamente com os valores válidos correspondentes para núcleos de CPU visíveis para tipos de máquinas nessas famílias.

Família de tipos de máquinas Número de vCPUs predefinido* Valores válidos para núcleos da CPU visíveis
Utilização geral
C4D ≤ 192 Qualquer
C4D > 192 Múltiplos de 2
C4 4, 8, 16, 24, 32, 48 Qualquer
C4 96 Múltiplos de 2
C4 144 Múltiplos de 3
C4 192 Múltiplos de 4
C4 288 Múltiplos de 6
C3D ≤ 180 Qualquer
C3D 360 Múltiplos de 2
C3 4, 8, 22, 44 Múltiplos de 1
C3 88 Múltiplos de 2
C3 176 Múltiplos de 4
E2 ≤ 32 Qualquer
N2 ≤ 32 Qualquer
N2 > 32 Múltiplos de 2
N2D ≤ 24 Qualquer
N2D > 24 Múltiplos de 2
N4 ≤ 80 Qualquer
N1 ≤ 64 Qualquer
N1 > 64 Múltiplos de 2
N1 (otimizado para TPU) 48 Qualquer
N1 (otimizado para TPU) 96 Múltiplos de 2
Otimizada para armazenamento
Z3 ≤ 44 Qualquer
Z3 88 Múltiplos de 2
Z3 176 Múltiplos de 4
Otimizada para computação
H4D (Pré-visualização) 192 Múltiplos de 4
H3 88 Múltiplos de 4
C2 4, 8, 16, 30 Qualquer
C2 60 Múltiplos de 2
Otimizada para memória
M4 16, 28, 32, 56 Qualquer
M4 64 112 Múltiplos de 2
M4 224 Múltiplos de 4
M3 128 Múltiplos de 2
M3 32, 64 Qualquer
M2 208 Múltiplos de 4
M2 416 Múltiplos de 8
M1 40 Qualquer
M1 80, 96 Múltiplos de 2
M1 160 Múltiplos de 4
Otimizado pelo acelerador
A4 224 Múltiplos de 2
A3 26, 52, 104, 208, 224 Múltiplos de 2
A2 ≤ 48 Qualquer
A2 96 Múltiplos de 2
G2 ≤ 48 Qualquer
G2 96 Múltiplos de 2
G4 (Pré-visualização) Todos os tipos de máquinas Múltiplos de 2
* O nome da maioria dos tipos de máquinas contém a contagem de vCPUs. No entanto, para tipos de máquinas otimizados para aceleradores que não sejam G2 e G4, o nome do tipo de máquina contém a quantidade de GPUs predefinida. Para ver a contagem de vCPUs dos tipos de máquinas otimizadas para aceleradores, reveja a documentação da família de máquinas otimizadas para aceleradores.

Personalize o número de núcleos do CPU visíveis durante a criação da VM

Para personalizar o número de núcleos do CPU visíveis ao criar uma única VM, siga os passos explicados nesta secção.

O exemplo seguinte mostra como criar uma VM do SQL Server com um número reduzido de núcleos de CPU visíveis.

Consola

Para personalizar o número de núcleos do CPU visíveis ao criar uma VM, faça o seguinte:

  • Em Configuração da máquina > Configurações avançadas > Número de núcleos visíveis, selecione o número de núcleos visíveis.

gcloud

Para criar uma VM do SQL Server com um número reduzido de núcleos da CPU visíveis, use o seguinte gcloud compute instances createcomando:

gcloud compute instances create VM_NAME \
    --image-project=windows-sql-cloud \
    --image-family=sql-ent-2019-win-2019 \
    --machine-type=MACHINE_TYPE \
    --visible-core-count=VISIBLE_CORE_COUNT \
    --zone=ZONE

Substitua o seguinte:

  • VM_NAME: o nome da VM.

  • MACHINE_TYPE: um tipo de máquina suportado, por exemplo, c2-standard-60.

  • VISIBLE_CORE_COUNT: o número de núcleos da CPU visíveis. Por exemplo, quando usa o tipo de máquina c2-standard-60, se estiver definido como 20 e o número de processadores por núcleo for 2, 40 dos 60 processadores ficam visíveis.

  • ZONE: a zona na qual criar a VM.

REST

Para criar uma VM do SQL Server com um número reduzido de núcleos da CPU visíveis, use o seguinte instances.insertmétodo:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
  "name": "VM_NAME",
  ...
  "advanced_machine_features": {
    ...
    "visibleCoreCount": "VISIBLE_CORE_COUNT"
  },
  ...
}

Substitua o seguinte:

  • PROJECT_ID: o ID do projeto.

  • ZONE: a zona na qual criar a VM.

  • VM_NAME: o nome da VM.

  • VISIBLE_CORE_COUNT: o número de núcleos da CPU visíveis. Por exemplo, quando usa o tipo de máquina c2-standard-60, se estiver definido como 20 e o número de processadores por núcleo for 2, 40 dos 60 processadores ficam visíveis.

Personalize o número de núcleos da CPU visíveis num grupo de VMs através de um modelo de instância

Para personalizar o número de núcleos do CPU visíveis ao criar uma VM através de um modelo de instância, siga os passos explicados nesta secção.

O exemplo seguinte mostra como criar um grupo de VMs do SQL Server idênticas com um número reduzido de núcleos de CPU visíveis através de um modelo de instância.

Consola

Para personalizar o número de núcleos do CPU visíveis ao criar um modelo de instância, faça o seguinte:

  • Em Configuração da máquina > Configurações avançadas > Número de núcleos visíveis, selecione o número de núcleos visíveis.

gcloud

  1. Crie um modelo de instância para VMs do SQL Server, cada uma com um número reduzido de núcleos da CPU visíveis, através do seguinte gcloud compute instance-templates createcomando:

    gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
       --image-project=windows-sql-cloud \
       --image-family=sql-ent-2019-win-2019 \
       --machine-type=MACHINE_TYPE \
       --visible-core-count=VISIBLE_CORE_COUNT \
       --zone=ZONE
    

    Substitua o seguinte:

    • INSTANCE_TEMPLATE_NAME: o nome do modelo de instância.

    • MACHINE_TYPE: um tipo de máquina suportado, por exemplo, c2-standard-60.

    • VISIBLE_CORE_COUNT: o número de núcleos do CPU visíveis. Por exemplo, quando usar o tipo de máquina c2-standard-60, se estiver definido como 20 e o número de threads por núcleo for 2, 40 das 60 CPUs são visíveis.

    • ZONE: a zona na qual criar as VMs.

  2. Crie as VMs do SQL Server, cada uma com um número reduzido de núcleos da CPU visíveis, através do seguinte gcloud compute instances createcomando:

    gcloud compute instances create INSTANCE_NAMES \
       --source-instance-template=INSTANCE_TEMPLATE_NAME
    

    Substitua o seguinte:

    • INSTANCE_NAMES: os nomes das VMs, separados por espaços, a criar a partir do modelo de instância

    • INSTANCE_TEMPLATE_NAME: o nome do modelo de instância a partir do qual criar as VMs

REST

  1. Crie um modelo de instância para VMs do SQL Server, cada uma com um número reduzido de núcleos da CPU visíveis, através do seguinte instanceTemplates.insertmétodo:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates
    
    {
     "name": "INSTANCE_TEMPLATE_NAME",
     ...
     "advanced_machine_features": {
       ...
       "visible_core_count": "VISIBLE_CORE_COUNT"
     },
     ...
    }
    

    Substitua o seguinte:

    • PROJECT_ID: o ID do projeto.

    • INSTANCE_TEMPLATE_NAME: o nome do modelo de instância.

    • VISIBLE_CORE_COUNT: o número de núcleos do CPU visíveis. Por exemplo, quando usar o tipo de máquina c2-standard-60, se estiver definido como 20 e o número de threads por núcleo for 2, 40 das 60 CPUs são visíveis.

  2. Crie as VMs do SQL Server, cada uma com um número reduzido de núcleos da CPU visíveis, através do seguinte instances.insertmétodo:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances?sourceInstanceTemplate=INSTANCE_TEMPLATE_NAME
    
    {
     "name": "VM_NAME",
     ...
    }
    

    Substitua o seguinte:

    • PROJECT_ID: o ID do projeto

    • ZONE: a zona na qual criar a VM

    • INSTANCE_TEMPLATE_NAME: o nome do modelo de instância a partir do qual criar as VMs

    • VM_NAME: o nome da VM a criar a partir do modelo de instância

Personalize o número de núcleos da CPU visíveis

Para personalizar o número de núcleos do CPU visíveis numa VM existente, siga os passos explicados nesta secção.

Se personalizou o número de núcleos do CPU visíveis num grupo de VMs através de um modelo de instância, tem de criar um novo modelo de instância e, em seguida, criar novas VMs a partir desse modelo de instância. Para mais informações sobre modelos de instâncias, consulte o artigo Modelos de instâncias.

Consola

Para personalizar o número de núcleos do CPU visíveis numa VM existente, faça o seguinte:

  1. Parar a VM.

  2. Em Configuração da máquina > Configurações avançadas > Número de núcleos visíveis, selecione o número de núcleos visíveis.

  3. Reinicie a VM.

gcloud

Para atualizar o valor do número de núcleos do CPU visíveis numa VM existente, siga estes passos. Para mais informações, consulte o artigo Atualize as propriedades da instância.

  1. Exporte as propriedades da VM existentes para um ficheiro através do comando gcloud compute instances export.

  2. No ficheiro que contém as propriedades exportadas, modifique ou adicione o valor para o seguinte:

    advancedMachineFeatures:
     visibleCoreCount: VISIBLE_CORE_COUNT
    
  3. Atualize as propriedades da VM através do gcloud compute instances update-from-filecomando com --most-disruptive-allowed-action=RESTART.

REST

Para atualizar o número de núcleos da CPU visíveis da VM, use o seguinte instances.update método:

PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME?most_disruptive_allowed_action=RESTART

{
  ...
  "advanced_machine_features": {
    ...
    "visible_core_count": "VISIBLE_CORE_COUNT"
  },
  ...
}

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

  • VISIBLE_CORE_COUNT: o número de núcleos da CPU visíveis

O que se segue?