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


A personalização do número de núcleos de CPU visíveis pode fornecer controle granular sobre os custos de licenciamento, ao mesmo tempo que mantém o desempenho da rede e dos discos permanentes. Essa customização reduz o número de vCPUs disponíveis para a instância de máquina virtual (VM); isso não altera o tipo ou preço da máquina.

O Compute Engine implementa cada CPU virtual (vCPU) como um único multithread de hardware executado em um núcleo de CPU físico. Para reduzir o número de vCPUs disponíveis para uma VM, o Compute Engine permite personalizar o número de núcleos de CPU visíveis.

Núcleos visíveis são os núcleos de CPU no hardware subjacente que suas VMs consomem. Por padrã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. Supondo o padrão de 2 threads por núcleo, o número de núcleos de CPU visíveis é 30. Se você reduzir o número de núcleos visíveis de 30 para 20, o número de vCPUs funcionais será reduzido de 60 para 40.

Considere personalizar o número de núcleos de CPU visíveis se ambas as condições a seguir 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 obrigatórias

Para obter as permissões necessárias para personalizar o número de núcleos de CPU visíveis, peça ao administrador para conceder a você a função IAM Compute Instance Admin (v1) ( roles/compute.instanceAdmin.v1 ) no projeto. Para obter mais informações sobre a concessão de funções, consulte Gerenciar acesso a projetos, pastas e organizações .

Esta função predefinida contém as permissões necessárias para personalizar o número de núcleos de CPU visíveis. Para ver as permissões exatas necessárias, expanda a seção Permissões necessárias :

Permissões necessárias

As seguintes permissões são necessárias para personalizar o número de núcleos de CPU visíveis:

  • Para personalizar o número de núcleos de 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 legada à 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 ao usar uma rede legada: 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 ao usar uma rede VPC: compute.subnetworks.useExternalIp no projeto ou na sub-rede escolhida
    • Para definir metadados de instância de VM para a VM: compute.instances.setMetadata no projeto
    • Para definir tags para a VM: compute.instances.setTags na VM
    • Para definir rótulos 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 somente leitura ou leitura-gravação: compute.disks.use no disco
    • Para anexar um disco existente no modo somente leitura: compute.disks.useReadOnly no disco
  • Para personalizar o número de núcleos de CPU visíveis em um grupo de VMs usando um modelo de instância: você precisa de todas as permissões que usaria durante a criação da VM e do compute.instanceTemplates.create no projeto

Você também poderá obter essas permissões com funções personalizadas ou outras funções predefinidas .

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

O total de vCPUs em um 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 você pode definir manualmente o número de threads por núcleo como 1.

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

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

Considerações de desempenho

A redução do número de núcleos visíveis pode afetar o desempenho da sua VM.

Disco permanente

  • Os limites de desempenho dos discos permanentes dependem do tipo de máquina e não são afetados pelo número de núcleos de CPU visíveis. Para obter mais informações, consulte Desempenho do armazenamento em 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 de CPU visíveis. No entanto, o desempenho da rede varia dependendo do número de vCPUs acessíveis à VM. Por exemplo, um tipo de máquina n2-standard-16 com um núcleo de CPU visível pode não ser capaz de usar totalmente uma conexão de 32 Gbps.

Preços

A redução do número de núcleos visíveis pode afetar o custo das suas VMs.

Custos de licenciamento do sistema operacional

  • Você pode reduzir os custos de licenciamento de alguns sistemas operacionais reduzindo o número de núcleos de CPU visíveis. Os sistemas operacionais aplicáveis ​​são aqueles que cobram por cada vCPU disponível para a VM, por exemplo, Windows Server e SQL Server. Para obter mais informações sobre as opções de licenciamento desses sistemas operacionais no Compute Engine, consulte Licenças da Microsoft .

Custos, cota e capacidade da VM

  • Os custos, a cota e a capacidade da VM permanecem os mesmos quando você personaliza o número de núcleos de CPU visíveis porque o Compute Engine cobra, rastreia a cota e aloca espaço em tipos de máquina para VMs como se estivessem usando o número de núcleos de CPU do tipo de máquina. Para mais informações sobre como o Compute Engine cobra as VMs, consulte Preços de instâncias de VM .

Limitações

  • Você não pode personalizar o número de núcleos de CPU visíveis enquanto uma VM está no estado RUNNING . Para obter mais informações sobre estados de VM, consulte Ciclo de vida da instância de VM .

  • No console do Google Cloud, quando o número de núcleos visíveis é reduzido, a métrica de utilização da CPU não pode ser escalonada para 100%. É limitado ao número de núcleos de CPU visíveis dividido pelo número máximo de núcleos de CPU.

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

Muitos tipos de máquinas oferecem suporte à personalização do número de núcleos de CPU visíveis. O valor da contagem visível de núcleos da CPU deve ser um número inteiro. O valor máximo é o número de vCPUs (ou GPUs para tipos de máquinas otimizadas para aceleradores) no tipo de máquina dividido pelo número de threads por núcleo da VM.

A tabela a seguir mostra os tipos de máquinas que suportam essa 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 tipo de máquina Contagem de vCPU predefinida * Valores válidos para núcleos de CPU visíveis
Uso geral
C4 4, 8, 16, 32, 48 Qualquer
C4 96 Múltiplos de 2
C4 192 Múltiplos de 4
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
c3-*-metal 192 Não compatível
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 (TPU otimizado) 48 Qualquer
N1 (TPU otimizado) 96 Múltiplos de 2
Otimizado para armazenamento
Z3 88 Múltiplos de 2
Z3 176 Múltiplos de 4
Otimizado para computação
H3 88 Múltiplos de 4
C2 4, 8, 16, 30 Qualquer
C2 60 Múltiplos de 2
Otimizado para memória
M4 56 Múltiplos de 1
M4 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 para 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
* O nome da maioria dos tipos de máquinas contém a contagem de vCPU. No entanto, para tipos de máquinas otimizados para aceleradores diferentes de G2, o nome do tipo de máquina contém a contagem de GPU predefinida. Para ver a contagem de vCPUs para os tipos de máquinas otimizadas para acelerador, revise a documentação da família de máquinas otimizadas para acelerador .

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

Para personalizar o número de núcleos de CPU visíveis ao criar uma única VM, use o console do Google Cloud, a CLI gcloud ou a API Compute Engine.

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

Console

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

  • Em Configuração da máquina > Configurações avançadas > Contagem 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 de CPU visíveis, use o seguinte comando gcloud compute instances create :

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 compatível, por exemplo, c2-standard-60 .

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

  • ZONE : a zona na qual criar a VM.

DESCANSAR

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

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 de CPU visíveis. Por exemplo, ao usar o tipo de máquina c2-standard-60 , se definido como 20 e o número de threads por núcleo for 2 , 40 das 60 CPUs ficarão visíveis.

Personalize o número de núcleos de CPU visíveis em um grupo de VMs usando um modelo de instância

Para personalizar o número de núcleos de CPU visíveis ao criar uma VM usando um modelo de instância, use o console do Google Cloud, a CLI gcloud ou a API Compute Engine.

O exemplo a seguir mostra como criar um grupo de VMs SQL Server idênticas com um número reduzido de núcleos de CPU visíveis usando um modelo de instância.

Console

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

  • Em Configuração da máquina > Configurações avançadas > Contagem 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 de CPU visíveis, usando o seguinte gcloud compute instance-templates create :

    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 compatível, por exemplo, c2-standard-60 .

    • VISIBLE_CORE_COUNT : o número de núcleos de CPU visíveis. Por exemplo, ao usar o tipo de máquina c2-standard-60 , se definido como 20 e o número de threads por núcleo for 2 , 40 das 60 CPUs ficarã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 de CPU visíveis, usando o seguinte comando gcloud compute instances create :

    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, para criar a partir do modelo de instância

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

DESCANSAR

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

    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 de CPU visíveis. Por exemplo, ao usar o tipo de máquina c2-standard-60 , se definido como 20 e o número de threads por núcleo for 2 , 40 das 60 CPUs ficarão visíveis.

  2. Crie as VMs do SQL Server, cada uma com um número reduzido de núcleos de CPU visíveis, usando o seguinte método instances.insert :

    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 para criar a VM

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

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

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

Para personalizar o número de núcleos de CPU visíveis em uma VM existente, use o console do Google Cloud, a CLI gcloud ou a API Compute Engine.

Se você personalizou o número de núcleos de CPU visíveis em um grupo de VMs usando um modelo de instância, deverá criar um novo modelo de instância e, em seguida, criar novas VMs a partir desse modelo de instância. Para obter mais informações sobre modelos de instância, consulte Modelos de instância .

Console

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

  1. Pare a VM.

  2. Em Configuração da máquina > Configurações avançadas > Contagem 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 de CPU visíveis em uma VM existente, use as etapas a seguir. Para obter mais informações, consulte Atualizar propriedades da instância .

  1. Exporte as propriedades da VM existentes para um arquivo usando o comando gcloud compute instances export .

  2. No arquivo que contém as propriedades exportadas, modifique ou inclua o valor do seguinte:

    advancedMachineFeatures:
     visibleCoreCount: VISIBLE_CORE_COUNT
    
  3. Atualize as propriedades da VM usando o comando gcloud compute instances update-from-file com --most-disruptive-allowed-action=RESTART .

DESCANSAR

Para atualizar a contagem de núcleos de CPU visíveis da VM, 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": {
    ...
    "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 da qual exportar propriedades

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

O que vem a seguir