Largura de banda da rede

O Google Cloud é responsável pela largura de banda por instância de máquina virtual (VM), e não por interface de rede (NIC, na sigla em inglês) ou endereço IP. O tipo de máquina de uma VM define a maior taxa de saída possível. No entanto, só é possível atingir essa taxa de saída máxima em circunstâncias específicas.

Nesta página, descrevemos as expectativas, que são úteis para o planejamento das implantações. Ele categoriza a largura de banda a partir de duas dimensões:

  • A direção de tráfego: conforme usada nesta página, a direção do tráfego é sempre da perspectiva de uma VM do Google Cloud:
    • Os pacotes enviados de uma VM do Google Cloud compõem o tráfego de saída (envio).
    • Os pacotes enviados a uma VM do Google Cloud compõem o tráfego de entrada (recebimento).
  • Tipo de endereço IP de destino: o Google Cloud categoriza os endereços IP como internos ou externos:

    • Um endereço IP dentro de uma rede VPC é chamado de endereço IP interno. Por exemplo, a NIC de cada VM tem um endereço IP interno principal localizado em uma rede VPC. Os endereços IP internos podem ser qualquer intervalo válido de endereço IP particular ou público reutilizado.
    • Um endereço IP com acesso pela Internet é um endereço IP externo. Os endereços IP externos podem estar localizados no Google Cloud, como o atribuído à NIC de uma VM. Endereços IP externos são sempre públicos, incluindo endereços IP públicos na Internet e fora do Google Cloud.

    Para definições precisas, consulte Endereços IP na documentação da VPC. Por exemplo, se você reutilizar um endereço IP público que seja interno na rede VPC e o endereço IP externo correspondente não estiver mais acessível.

Todas as informações nesta página são aplicáveis às VMs do Compute Engine, bem como a produtos que dependam delas. Por exemplo, um nó do Google Kubernetes Engine é uma VM do Compute Engine.

Nem outras interfaces de rede (NICs), nem endereços IP adicionais por NIC aumentam a largura de banda de entrada ou saída de uma VM. Por exemplo, uma VM n1-standard-8 com duas NICs é limitada a 16 Gbps de largura de banda de saída total, e não 16 Gbps de largura de banda por NIC.

Tabela de resumo da largura de banda

A tabela a seguir resume as expectativas de largura de banda:

Endereço de destino do pacote
Direção do trânsito Destino de endereço IP interno Destino de endereço IP externo
Saída
de uma VM do Google Cloud
  • A saída máxima possível é definida pelo tipo de máquina da VM de envio. Ao selecionar tipos de máquinas N2, N2D ou C2 maiores, é possível alcançar até 100 Gbps de capacidade de largura de banda TIER 1.
  • Para atingir a taxa de saída máxima, envie tráfego para um endereço IP interno associado a outra VM do Google Cloud na mesma zona que a VM de envio, na mesma rede VPC ou em uma conectada por peering de rede VPC.
A saída máxima de uma única VM não pode exceder o seguinte:
  • Total de 7 Gbps para todos os fluxos de saída para endereços IP externos
  • 3 Gbps por fluxo de saída individual para um endereço IP externo
Entrada
para uma VM do Google Cloud
  • Limitada por tipo de máquina, sistema operacional e condições da rede.
  • O Google Cloud não impõe limitação adicional à entrada para um endereço IP interno.
O Google Cloud protege cada VM limitando o tráfego de entrada entregue a um endereço IP externo associado à VM. O limite é a primeira das seguintes taxas encontradas:
  • 1.800.000 pps (pacotes por segundo)
  • 20 Gbps

Largura de banda de saída

O Google Cloud limita a largura de banda de envio (saída) por VM e por projeto. A largura de banda de saída inclui o tráfego enviado de todas as NICs da VM e os dados transferidos para todos os discos permanentes conectados à VM.

A largura de banda de saída máxima depende do tipo de máquina da VM. Esses números são documentados por tabelas de cada tipo de máquina em cada família de máquinas. Por exemplo, uma VM n2-standard-8 tem oito vCPUs. Portanto, a largura de banda de saída máxima é de 16 Gbps. No entanto, é possível criar VMs de alta largura de banda com tipos de máquina maiores, de uso geral e otimizados para computação.

A largura de banda de saída de cada tipo de máquina está listada na página específica da família de máquinas:

A largura de banda de saída máxima não é uma garantia. Além do tipo de máquina, a largura de banda de saída é afetada por fatores como os seguintes exemplos, que não são exaustivos:

  • tamanho do pacote
  • sobrecarga de protocolo
  • o número de fluxos
  • configurações do driver Ethernet do SO convidado da VM, como descarregamento de soma de verificação e descarga de segmentação TCP (TSO, na sigla em inglês)
  • congestionamento da rede
  • o destino do pacote: o Google Cloud processa o tráfego de saída de uma VM de maneira diferente, caso o endereço de destino do pacote de saída seja um endereço IP interno ou externo.
  • Em uma situação em que os discos permanentes concorrem com outro tráfego de saída de rede, 60% da largura de banda máxima da rede é destinada às gravações em disco permanente, deixando 40% para o outro tráfego de saída. Veja outros fatores que afetam o desempenho na documentação do Persistent Disk para mais detalhes.

Saída para destinos de endereços IP internos

Da perspectiva de uma VM de envio, o Google Cloud restringe a saída máxima possível aos destinos de endereços IP internos de acordo com o tipo de máquina da VM de envio. Os endereços IP internos são aqueles em uma rede VPC, em uma rede VPC diferente conectada usando peering de rede VPC ou em uma rede conectada à sua VPC com o Cloud VPN ou o Cloud Interconnect.

A lista a seguir classifica o tráfego entre VMs usando origens e destinos de endereços IP internos, desde a maior largura de banda possível até a menor:

  • Entre VMs na mesma zona
  • Entre VMs em zonas diferentes na mesma região
  • Entre VMs em zonas diferentes em regiões diferentes

Ao enviar tráfego de uma VM a um endereço IP interno localizado em outra rede VPC conectada a partir de túneis do Cloud VPN, a largura de banda de saída fica limitada à taxa máxima de dados de um túnel do Cloud VPN.

Para utilizar plenamente a largura de banda de vários túneis e roteamento ECMP, é necessário usar várias conexões TCP (cinco tuplas únicas). Um componente com cinco tuplas consiste em um protocolo, endereço IP de origem, porta de origem, endereço IP de destino e porta de destino.

Saída para destinos de endereços IP externos

Da perspectiva de uma VM de envio, o Google Cloud limita o tráfego de saída enviado a um destino de endereço IP externo para qualquer uma das seguintes taxas que for alcançada primeiro. Um endereço IP externo é roteável publicamente: um endereço IP externo de um recurso do Google Cloud ou um endereço na Internet.

  • Um total de 7 Gbps para todos os fluxos e conexões de pacote
  • 3 Gbps por fluxo (hash exclusivo de cinco tuplas)

É possível associar um endereço IP externo a uma VM do Google Cloud em uma das seguintes capacidades:

  • Você pode atribuir um endereço IP externo à interface de rede de uma VM.
  • Uma regra de encaminhamento externo usada para encaminhamento de protocolo exige um endereço IP externo.
  • O endereço IP da regra de encaminhamento de um balanceador de carga TCP/UDP de rede exige um endereço IP externo.
  • Endereços IP externos são associados a um gateway do Cloud NAT.

Por exemplo, mesmo que uma instância n2-standard-16 tenha um limite de largura de banda de saída de 32 Gbps, para a Internet, esse limite é de 7 Gbps.

Cotas e limites de saída agregados por projeto

O Google Cloud também aplica o seguinte aos projetos:

  • Largura de banda máxima da saída da Internet de todas as VMs em cada região para endereços IP externos fora do Google Cloud: esse máximo é definido por cada cota de largura de banda de saída da Internet da região.

  • Largura de banda de saída máxima de todas as VMs em uma determinada região para todas as outras regiões do Google Cloud: aplica-se ao tráfego enviado a ambos os destinos de endereços IP internos e externos. Esse limite é calculado usando telemetria interna e provavelmente não restringe a largura de banda entre regiões para a maioria dos projetos. Se tiver perguntas sobre como alcançar a largura de banda de região para região necessária, entre em contato com a equipe de vendas.

Largura de banda de entrada

O Google Cloud processa o tráfego de entrada para uma VM de maneira diferente, caso o destino do pacote seja um endereço IP interno ou externo.

Entrada para destinos de endereços IP internos

O Google Cloud não implementa restrição de propósito na entrada de tráfego para um endereço IP interno associado. O tipo de máquina, sistema operacional e outras condições de rede e recursos definem quanto tráfego interno uma VM pode receber. Um endereço IP interno associado é um dos seguintes:

  • O endereço IP interno principal da interface de rede de uma VM
  • Um endereço IP de alias de um intervalo de IP do alias atribuído à interface de rede de uma VM
  • O endereço IP de uma regra de encaminhamento interno usada para encaminhamento de protocolo interno
  • O endereço IP de uma regra de encaminhamento do balanceador de carga TCP/UDP interno

Entrada para destinos de endereços IP externos

O Google Cloud limita o tráfego de entrada enviado para o endereço IP externo associado de uma VM para qualquer uma das seguintes taxas que for alcançada primeiro:

  • 180.000.000 pacotes por segundo
  • 20 Gbps

Para esse limite, um endereço IP externo associado é um dos seguintes:

  • Um endereço IP externo atribuído à interface de rede de uma VM.
  • O endereço IP de uma regra de encaminhamento externo usada para encaminhamento de protocolo externo.
  • O endereço IP de uma regra de encaminhamento do balanceador de carga TCP/UDP da rede.
  • Respostas de entrada estabelecidas que foram processadas pelo Cloud NAT.

Para as duas últimas definições de um endereço IP externo associado: se um endereço IP externo for compartilhado entre várias VMs, o Google Cloud limitará o tráfego de entrada individualmente para cada VM de back-end.

Filas de recebimento e transmissão

Cada NIC de VM recebe um número de filas de recebimento e transmissão para o processamento de pacotes da rede.

  • Fila de recebimento (RX): fila para receber pacotes. Quando a NIC recebe um pacote da rede, a NIC seleciona o descritor de um pacote recebido da fila, o processa e o envia para o SO convidado em uma fila de pacotes anexada a uma vCPU núcleo por interrupção. Se a fila RX estiver cheia e não houver buffer disponível para colocar um pacote, o pacote será descartado. Isso normalmente pode acontecer se um aplicativo estiver superutilizando um núcleo de vCPU que também está anexado à fila de pacotes selecionada.
  • Fila de transmissão (TX): fila para transmitir pacotes. Quando o SO convidado envia um pacote, um descritor é alocado e colocado na fila do TX. Em seguida, a NIC processa o descritor e transmite o pacote.

Alocação de fila padrão

A menos que você atribua contagens de fila para NICs explicitamente, é possível modelar o algoritmo que o Google Cloud usa para atribuir um número fixo de filas de RX e TX por NIC desta maneira:

  1. Divida o número de vCPUs pelo número de NICs e descarte todo o restante: ⌊number of vCPUs/number of NICs⌋. Esse cálculo sempre resulta em um número inteiro, não em uma fração.

  2. Se o número calculado for zero, ignore o número calculado e atribua uma fila a cada NIC.

  3. Determine se o número calculado é maior que o número máximo de filas por NIC. O número máximo de filas por NIC depende do tipo de driver:

    • Usando virtIO ou um driver personalizado, o número máximo de filas por NIC é 32. Se o número calculado for maior que 32: ignore o número calculado e atribua 32 filas a cada NIC.
    • Usando gvNIC, o número máximo de filas por NIC é 16. Se o número calculado for maior que 16: ignore o número calculado e atribua 16 filas a cada NIC.

Por exemplo:

  • Se uma VM tiver oito vCPUs e três NICs, o número calculado será ⌊8/3⌋ = 2. Independentemente do driver, o Google Cloud atribui duas filas a cada NIC.

  • Se uma VM tiver 96 vCPUs e duas NICs, o número calculado será ⌊96/2⌋ = 48. Como 48 é maior que o número máximo de filas por NIC, o Google Cloud atribui a cada NIC o número máximo de filas por NIC possível. Isso varia de acordo com o driver. Se a VM usar o driver virtIO, o Google Cloud atribuirá 32 por NIC. Se a VM usar o driver da gvNIC, o Google Cloud atribuirá 16 filas por NIC.

Em sistemas Linux, use ethtool para configurar uma NIC com menos filas do que o número de filas que o Google Cloud atribui por NIC.

Alocação de fila personalizada

Em vez da alocação padrão de filas, é possível atribuir uma contagem de filas personalizada (total de RX e TX) a cada NIC ao criar uma nova VM usando a API Compute Engine.

O número de filas personalizadas que são especificadas precisa aderir às seguintes regras:

  • a contagem mínima de filas que pode ser atribuída por NIC é uma;

  • a contagem máxima de filas que você pode atribuir por NIC depende do tipo de driver:

    • usando virtIO ou um driver personalizado, a contagem máxima de filas será 32;
    • usando gvNIC, a contagem máxima de filas será 16.
  • Se você atribuir contagens de filas personalizadas a todas as NICs da VM, a soma das atribuições de filas precisará ser menor ou igual ao número de vCPUs atribuídas à instância de VM.

Por exemplo:

  • Se uma VM tiver oito vCPUs e três NICs, será possível atribuir uma fila a nic0, quatro filas a nic1 e três filas a nic2. Neste exemplo, não é possível atribuir quatro filas posteriormente a nic2 enquanto mantém as outras duas atribuições de filas de NIC porque a soma das filas atribuídas não pode exceder o número de vCPUs (oito).

  • Se uma VM tiver 96 vCPUs e duas NICs, você poderá atribuir até 32 filas às duas NICs usando o driver virtIO ou até 16 filas usando o driver gvNIC. Neste exemplo, a soma das filas atribuídas é sempre menor que o número de vCPUs.

Também é possível atribuir uma contagem de filas personalizadas para apenas algumas NICs, permitindo que o Google Cloud atribua filas para as NICs restantes. O número de filas que podem ser atribuídas por NIC ainda está sujeito às regras acima. Simule a possibilidade da configuração e, se for possível, o número de filas que o Google Cloud atribui às NICs restantes com este processo:

  1. Calcule a soma das filas das NICs usando a atribuição de filas personalizada. Para uma VM de exemplo com 20 vCPUs e seis NICs, suponha que você atribua cinco filas nic0, seis filas nic1, quatro filas nic2 e que o Google Cloud atribua filas para nic3, nic4 e nic5. Neste exemplo, a soma das filas personalizadas atribuídas é 5+6+4 = 15.

  2. Subtraia a soma das filas personalizadas atribuídas do número de vCPUs. Se a diferença não for pelo menos igual ao número de NICs restantes a que o Google Cloud precisa atribuir filas, o Google Cloud retornará um erro. Continuando com o exemplo de VM de 20 vCPUs e uma soma de 15 filas personalizadas atribuídas, o Google Cloud tem 20-15 = 5 filas restantes para atribuir às outras NICs (nic3, nic4 e nic5).

  3. Divida a diferença da etapa anterior pelo número de NICs restantes e descarte qualquer restante: ⌊(number of vCPUs - sum of assigned queues)/(number of remaining NICs)⌋. Este cálculo sempre resulta em um número inteiro (não uma fração) que é pelo menos igual a um por causa da restrição explicada na etapa anterior. O Google Cloud atribui a cada NIC restante uma contagem de filas correspondente ao número calculado, desde que o número calculado não seja maior que o número máximo de filas por NIC. O número máximo de filas por NIC depende do tipo de driver:

    • Usar virtIO ou um driver personalizado se o número calculado de filas para cada NIC restante for maior que 32, o Google Cloud atribuirá 32 filas a cada NIC restante.
    • Usando gvNIC, se o número calculado de filas para cada NIC restante for maior que 16, o Google Cloud atribuirá 16 filas a cada NIC.

API

Crie uma VM com contagens de fila específicas para NICs.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
{
  "name": "VM_NAME",
  "machineType": "machineTypes/MACHINE_TYPE"
  "networkInterfaces": [
      {
        "network": string,
        "subnetwork": string,
        "networkIP": string,
        "name": string,
        "queueCount": "QUEUE_SIZE",
        ....
      ],
      } ],
 }

Substitua:

  • PROJECT_ID: ID do projeto em que a VM será criada
  • ZONE: zona em que a VM será criada
  • MACHINE_TYPE: tipo de máquina, predefinida ou personalizada, para a nova VM
  • VM_NAME: nome da nova VM
  • QUEUE_SIZE: número de filas da NIC, sujeito às regras discutidas nesta seção.

Alocações de fila e alteração do tipo de máquina

Se você interromper uma instância de VM e alterar o tipo de máquina e o novo tipo de máquina tiver um número diferente de vCPUs, o Google Cloud não alterará as atribuições de fila por NIC. As atribuições de fila de NIC padrão ou personalizadas são definidas apenas ao criar uma VM.

A seguir