Alocação excessiva de CPUs em VMs de locatário individual


A alocação excessiva de CPU em nós de locatário individual permite agendar instâncias que podem compartilhar seus ciclos de CPU sobressalentes entre si. Isso permite superprovisionar recursos de nó de locatário individual e agendar mais CPUs de VM em um nó de locatário individual do que normalmente estão disponíveis. A alocação excessiva de CPU é especialmente valiosa para cargas de trabalho subutilizadas, mas que podem sofrer intermitências relativamente não correlacionadas.

A alocação excessiva de CPU pode ajudar a reduzir os custos por VM, distribuindo o custo de um nó de locatário individual por mais VMs. Também pode reduzir os custos de licenciamento por VM ao usar licenças por soquete ou por núcleo.

VMs com CPUs sobrecarregadas podem utilizar recursos de CPU não utilizados das seguintes maneiras:

  • Se um nó de locatário individual não estiver cheio, as VMs supercomprometidas poderão utilizar núcleos não alocados.

  • Se outra VM em um nó de locatário individual não estiver utilizando todos os seus recursos de CPU (por exemplo, porque a CPU está ociosa), uma VM supercomprometida poderá usar esses recursos de CPU.

Nível de supercomprometimento

Você pode especificar o valor para o número mínimo de CPUs alocadas para uma VM ao criar uma VM ou após interrompê-la. O nível de overcommit representa o número mínimo de threads de CPU subjacentes que têm garantia de disponibilidade para uma VM. Se a VM tiver mais vCPUs do que threads subjacentes disponíveis, as vCPUs da VM compartilharão os recursos de computação subjacentes e serão executadas com desempenho degradado.

Você pode definir esse valor para cada VM, o que permite provisionar VMs com diferentes taxas de superalocação de CPU em um único nó de locatário individual. Valores mais baixos reduzem os requisitos de capacidade às custas potenciais do desempenho se ocorrerem rajadas correlacionadas. Determinar um valor ideal para o número mínimo de CPUs requer uma compreensão da utilização da carga de trabalho e da modificação iterativa do valor.

Ao definir esse valor, tenha em mente o seguinte:

  • Se você não definir o valor para o número mínimo de CPUs ou definir o valor para o número mínimo de CPUs igual ao número de CPUs no tipo de máquina da VM, a taxa de superalocação permitida da VM será 1,0. Com uma taxa de superalocação de 1,0, todas as CPUs são acessíveis apenas para esta VM e não há recursos de CPU disponíveis para serem supercomprometidos com outras VMs.

  • O número mínimo de CPUs não pode ser maior que o número de CPUs especificado pelo tipo de máquina da VM.

  • A soma dos valores do número mínimo de CPUs para todas as VMs em um nó de locatário individual não pode exceder a capacidade da CPU desse tipo de nó de locatário individual , que no tipo de nó n1-node-96-624 é 96.

O valor para o número de CPUs especificado pelo tipo de máquina da VM é um valor estático e representa o número de CPUs que uma VM pode aumentar a partir do número mínimo se essas CPUs estiverem disponíveis. Se você precisar de um número de CPUs diferente daquelas fornecidas pelos tipos de máquina predefinidos , poderá usar um tipo de máquina personalizado .

Considerações

Antes de configurar os níveis de sobrecarga de CPU para VMs, considere a criticidade da sua carga de trabalho. Cargas de trabalho menos críticas, como cargas de trabalho de desenvolvimento e teste, podem potencialmente tolerar níveis mais elevados de sobrecarga. Cargas de trabalho mais críticas, como um sistema de pagamentos de produção, podem não tolerar tantos compromissos excessivos ou nenhum.

Considere também a utilização de sua carga de trabalho. Cargas de trabalho com alta utilização de CPU não são boas candidatas para superalocação de CPU porque não terão ciclos de utilização extras para outras VMs supercomprometidas utilizarem. Além disso, cargas de trabalho com baixa utilização média de CPU, mas baixo pico de utilização, podem se beneficiar de diferentes tamanhos de tipos de máquinas.

O uso da superalocação de CPU beneficia cargas de trabalho intermitentes não correlacionadas que têm alta utilização de pico e baixa utilização média, porque essas cargas de trabalho têm maior probabilidade de ter recursos de CPU disponíveis para compartilhar entre VMs quando algumas VMs precisam interromper sua utilização. Se todas as VMs em um host explodirem ao mesmo tempo, o host não terá recursos suficientes para suas VMs.

Limitações

Limitações de carga de trabalho

A alocação excessiva de CPU é mais adequada para cargas de trabalho sem requisitos rigorosos de desempenho — por exemplo, cargas de trabalho de desenvolvimento e teste e infraestruturas de desktops virtuais.

Altos níveis de alocação excessiva de CPU podem não ser apropriados para cargas de trabalho sensíveis ao desempenho.

Para cargas de trabalho com utilização média e máxima consistentemente baixa, o Google recomenda o redimensionamento . Ou seja, em vez de sobrecarregar CPUs, recomendamos modificar o tamanho da instância de VM para corresponder aos requisitos de recursos dessa carga de trabalho.

Se suas instâncias estiverem muito comprometidas, mova-as para outro nó de locatário individual .

Limitações de tipo de máquina

Você só pode sobrecarregar CPUs no seguinte:

Limitações de nível de supercomprometimento

Você só pode configurar a CPU mínima em cada nó de locatário individual para metade das CPUs da VM, permitindo uma taxa máxima de superalocação de nó de locatário individual de 2,0.

Limitações de agendamento de VM

Grupos de nós de locatário individual baseados em modelos de nós de locatário individual que não estão configurados para superalocação de CPU não permitem o provisionamento de VMs com superalocação de CPU habilitada. Ou seja, não é possível agendar uma VM com um número mínimo especificado de CPUs em um grupo de nós de locatário individual que não esteja configurado para superalocação de CPU.

Contingente

A cota de CPU é baseada no número de vCPUs do tipo de nó de locatário individual e não no máximo potencial de vCPUs disponíveis para superalocação.

Custos

Os nós de locatário individual que têm a superalocação de CPU selecionada em seu modelo de nó serão cobrados 25% adicionais. Essa cobrança é adicional ao prêmio de 10% para execução de VMs em nós de locatário individual . O prêmio de superalocação de CPU é fixo, independentemente do nível de superalocação de CPU e de quantas VMs estão agendadas no nó de locatário individual.

Os nós de locatário individual oferecem descontos por uso contínuo . Descontos por uso prolongado estão disponíveis para o prêmio de locatário único e o prêmio de supercomprometimento de CPU.

Para estimar o custo de execução de VMs em nós de locatário individual, consulte Calculadora de preços .

Configurar VMs de locatário individual para supercomprometimento

Para configurar VMs de locatário individual para que tenham recursos de CPU disponíveis para superalocação, faça o seguinte:

  1. Crie um modelo de nó de locatário individual que tenha a superalocação de CPU habilitada. Você deve ativar a superalocação de CPU ao criar o modelo de nó. Não é possível ativar a superalocação de CPU depois de criar um modelo de nó.

  2. Crie um grupo de nós de locatário individual com base no modelo de nó de locatário individual que tem a superalocação de CPU ativada.

  3. Crie uma VM e faça o seguinte:

    1. Escolha um tipo de máquina para a VM. O número de CPUs no tipo de máquina representa o número máximo de CPUs que a VM pode aumentar a partir do número mínimo de CPUs se o número mínimo de CPUs for menor que o número de CPUs especificado pelo tipo de máquina.

      Você pode escolher um tipo de máquina diferente para cada VM em um nó de locatário individual, desde que não exceda a capacidade de CPU e memória do nó de locatário individual.

    2. Especifique o número mínimo de CPUs a serem alocadas para essa única VM ou use um grupo de instâncias gerenciadas para criar várias VMs que tenham o mesmo nível de superalocação de CPU.

Antes de começar

  • Crie um modelo de nó de locatário individual e especifique --cpu-overcommit-type=enabled .
  • Crie um grupo de nós de locatário individual com base no modelo de nó de locatário individual com a superalocação de CPU ativada.
  • Se ainda não o fez, configure a autenticação. Autenticação é o processo pelo qual sua identidade é verificada para acesso a Google Cloud serviços e APIs. Para executar códigos ou amostras em um ambiente de desenvolvimento local, você pode se autenticar no Compute Engine selecionando uma das seguintes opções:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    2. Set a default region and zone.
    3. REST

      Para usar as amostras da API REST nesta página em um ambiente de desenvolvimento local, use as credenciais fornecidas para gcloud CLI.

        After installing the Google Cloud CLI, initialize it by running the following command:

        gcloud init

        If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      Para mais informações, consulte Autenticar para usar REST na documentação de autenticação do Google Cloud.

Defina o nível de superalocação da CPU

Os procedimentos a seguir mostram como criar uma VM de locatário individual com recursos de CPU disponíveis para supercomprometimento. Se precisar modificar o nível de superalocação de CPU de uma VM em execução, você deverá primeiro parar a VM.

Console

No console do Google Cloud, crie uma VM de locatário individual em um grupo de nós de locatário individual que foi criado a partir de um modelo de nó de locatário individual com a alocação excessiva de CPU ativada:

  1. Acesse a página Nós de locatário individual .

    Acesse nós de locatário individual

  2. Clique em Grupos de nós .

  3. Clique no grupo de nós de locatário individual no qual deseja criar uma VM.

  4. Clique em Criar instância .

  5. Especifique o Nome , a Região e a Zona da VM.

  6. Em Configuração da máquina , escolha um tipo de máquina fixa ou personalizada com pelo menos 4 vCPUs.

  7. Em CPU overcommit , selecione Enable CPU overcommit .

  8. Em Mínimo de vCPUs alocadas , ajuste o controle deslizante ou insira manualmente o número de vCPUs para especificar o nível de superalocação das CPUs nesta VM.

  9. Clique em Criar para criar uma instância de VM que tenha recursos de CPU disponíveis para supercomprometimento.

gcloud

O exemplo a seguir mostra como usar o comando gcloud compute instances create para criar uma VM de locatário individual em um tipo de máquina predefinido com recursos de CPU disponíveis para superalocação.

gcloud compute instances create VM_NAME \
    --machine-type=MACHINE_TYPE \
    --min-node-cpu=MIN_VCPUS \
    --node-group=GROUP_NAME

Substitua o seguinte:

  • VM_NAME : o nome da VM na qual as CPUs serão sobrecarregadas.

  • MACHINE_TYPE : o tipo de máquina para provisionar a VM de locatário individual. O número de CPUs especificado pelo tipo de máquina é o número máximo de CPUs que a VM pode aumentar a partir de MIN_VCPUS .

  • MIN_VCPUS : o número mínimo de vCPUs com garantia de disponibilidade para esta VM.

  • GROUP_NAME : o nome do grupo de nós de locatário individual no qual provisionar a VM.

Configurando o nível de superalocação em um tipo de máquina personalizado

Para criar uma VM de locatário individual com recursos de CPU disponíveis para superalocação em um tipo de máquina personalizado, omita o sinalizador --machine-type e, em vez disso, use os sinalizadores --custom-cpu e --custom-memory para especificar o número de CPUs e a quantidade de memória, em gigabytes, para a máquina personalizada.

DESCANSAR

O exemplo a seguir mostra como usar o método instances.insert para criar uma VM de locatário individual em um tipo de máquina fixo com recursos de CPU disponíveis para superalocação.

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

{
  "machineType": "zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE",
  "name": "VM_NAME",
  "scheduling": {
    "minNodeCpus": MIN_VCPUS,
    "nodeAffinities": [
      {
        "key": "compute.googleapis.com/node-group-name",
        "operator": "IN",
        "values": [
          "GROUP_NAME"
        ]
      }
    ]
  },
  ...
}

Substitua o seguinte:

  • PROJECT_ID : o ID do seu projeto .

  • ZONE : a zona para esta solicitação.

  • MACHINE_TYPE_ZONE : a zona que hospeda o tipo de máquina.

  • MACHINE_TYPE : o tipo de máquina para provisionar a VM de locatário individual. O número de CPUs especificado pelo tipo de máquina é o número máximo de CPUs que a VM pode aumentar a partir de MIN_VCPUS .

  • VM_NAME : o nome da VM de locatário individual para a superalocação de CPUs.

  • MIN_VCPUS : o número mínimo de vCPUs com garantia de disponibilidade para esta VM.

  • GROUP_NAME : o nome do grupo de nós de locatário individual no qual provisionar a VM.

Configurando o nível de superalocação em um tipo de máquina personalizado

Para criar uma VM de locatário individual com recursos de CPU disponíveis para superalocação em um tipo de máquina personalizado, substitua o valor do campo machineType por zones/zone/machineTypes/custom- CPUS - MEMORY , substituindo CPUS pelo número de CPUs e MEMORY pela quantidade de memória, em megabytes, para o tipo de máquina personalizado.

Atualizar o nível de superalocação da CPU

Os procedimentos a seguir mostram como atualizar o nível de superalocação de CPU de uma VM de locatário individual.

gcloud

  1. Para modificar o nível de superalocação de CPU de uma VM em execução, primeiro você deve parar a VM. Para interromper uma VM, use o comando gcloud compute instances stop da seguinte forma:

    gcloud compute instances stop VM_NAME
    

    Substitua VM_NAME pelo nome da instância que você deseja interromper.

  2. Para atualizar o nível de superalocação de CPU de uma VM de locatário individual, use o comando gcloud compute instances set-scheduling da seguinte forma:

    gcloud compute instances set-scheduling VM_NAME \
      --min-node-cpu=MIN_VCPUS

    Substitua o seguinte:

    • VM_NAME : o nome da VM de locatário individual para modificar o nível de superalocação de CPU.

    • MIN_VCPUS : o número mínimo de vCPUs com garantia de disponibilidade para esta VM.

DESCANSAR

  1. Para modificar o nível de superalocação de CPU de uma VM em execução, primeiro você deve parar a VM. Para interromper uma VM, crie uma solicitação POST usando o método instances.stop da seguinte forma:

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

    Substitua o seguinte:

    • PROJECT_ID : o ID do seu projeto .

    • ZONE : a zona para esta solicitação.

    • VM_NAME : o nome da VM de locatário individual para modificar o nível de superalocação de CPU.

  2. Para atualizar o nível de superalocação de CPU de uma VM de locatário individual, use o método instances.setScheduling da seguinte forma:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setScheduling
    {
    "minNodeCpus":MIN_VCPUS
    }
    

    Substitua o seguinte:

    • PROJECT_ID : o ID do seu projeto .

    • ZONE : a zona para esta solicitação.

    • VM_NAME : o nome da VM de locatário individual para modificar o nível de superalocação de CPU.

    • MIN_VCPUS : o número mínimo de vCPUs com garantia de disponibilidade para esta VM.

Desabilitar o comprometimento excessivo da CPU para VMs de locatário individual

Os procedimentos a seguir mostram como desabilitar a superalocação de CPU de uma VM de locatário individual.

gcloud

O exemplo a seguir mostra como usar o comando gcloud compute instances set-scheduling para desativar o comprometimento excessivo da CPU de uma VM de locatário individual.

gcloud compute instances set-scheduling VM_NAME \
  --clear-min-node-cpu

Substitua o seguinte:

  • VM_NAME : o nome da VM de locatário individual para desativar o comprometimento excessivo da CPU.

DESCANSAR

O exemplo a seguir mostra como usar o comando instances.setScheduling para desabilitar a superalocação de CPU de uma VM de locatário individual.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setScheduling
{
  "minNodeCpus":null
}

Substitua o seguinte:

  • PROJECT_ID : o ID do seu projeto .

  • ZONE : a zona para esta solicitação.

  • VM_NAME : o nome da VM de locatário individual para desativar o comprometimento excessivo da CPU.

Ver uso da CPU

Para verificar o uso da CPU de VMs de locatário individual em um grupo de nós de locatário individual, faça o seguinte:

  1. No console do Google Cloud, acesse a página Nós de locatário individual .

    Acesse nós de locatário individual

  2. Clique em Grupos de nós .

  3. Clique no grupo de nós de locatário individual que contém o nó de locatário individual que possui a VM com CPUs sobrecarregadas.

  4. Clique no nó de locatário individual que possui a VM com CPUs supercomprometidas.

  5. Sob o nome do nó de locatário individual, visualize o uso da CPU , o tipo de superalocação da CPU e o uso mínimo da CPU .

    • O uso da CPU mostra o total do número máximo de CPUs para todas as VMs neste nó de locatário individual dividido pelo número de CPUs especificado pelo tipo de nó de locatário individual.

      O número de CPUs no nó disponíveis para supercomprometimento é o numerador menos o denominador, e o nível de supercomprometimento é o quociente do numerador e do denominador.

    • O uso mínimo de CPU mostra a soma do número mínimo de CPUs alocadas para todas as VMs em um nó de locatário individual dividido pelo número de CPUs especificado pelo tipo de nó.

Otimize os níveis de sobrecarga da CPU

Para ajudar a otimizar o ajuste dos níveis de sobrecarga da CPU, o Compute Engine fornece a métrica Tempo de espera do agendador . A métrica Tempo de Espera do Agendador indica o tempo de espera agregado para todas as vCPUs na VM e ajuda a determinar o impacto da alocação excessiva da CPU no desempenho da VM.

A sensibilidade da carga de trabalho varia, mas uma regra geral é usar 20 milissegundos de tempo de espera do agendador acumulados por segundo (20 msps) como o tempo máximo de espera para cada vCPU. Por exemplo, se uma VM estiver definida para 8 vCPUs, o limite básico será de 160 msps, o que resulta em um tempo de espera médio aceitável do agendador de 20 msps por vCPU. Os requisitos de desempenho da sua carga de trabalho determinarão, em última análise, limites aceitáveis.

  1. No console do Google Cloud, acesse a página Monitoramento .

    Vá para Monitoramento

  2. Clique em Explorador de métricas .

  3. No campo Tipo de recurso , insira Instância de VM .

  4. No campo Métrica , insira Tempo de espera do agendador .

  5. Opcionalmente, configure alertas para acionar alertas para limites de tempo de espera da VM clicando em Alertas .

O que vem a seguir