Calcular a capacidade da rede por meio da interconexão

Neste tutorial, descrevemos como calcular a capacidade da rede, tanto no Google Cloud quanto nos locais de nuvem terceirizados ou no local que estão conectados por meio do Cloud Interconnect. Neste documento, descrevemos como analisar os resultados, listamos as variáveis que podem afetar o desempenho da rede e fornecemos algumas dicas de solução de problemas.

Limitações e considerações

  • Limitações do Cloud Interconnect são aplicáveis. Para mais informações, consulte Cotas do Cloud Interconnect.
  • Limites da NIC: o Google Cloud é responsável pela largura de banda de cada instância de máquina virtual (VM), e não de cada interface de rede (NIC) ou endereço IP. O tipo de máquina de uma VM define a taxa máxima de saída dela. No entanto, essa taxa só pode ser alcançada em situações específicas. Consulte esta tabela para ver o número de vCPUs por tipo de máquina.
  • Outros dispositivos no caminho (firewall, chaves com buffers pequenos e dispositivos de outros fornecedores) e as respectivas limitações são aplicados. Realize as tarefas a seguir para atenuar essas limitações.

    • Reúna as estatísticas de rede nos firewalls e interruptores no caminho.
    • Para testar o Cloud Interconnect, ignore o máximo de dispositivos possível entre o host local e o dispositivo Google Edge.
    • Identifique e verifique todos os dispositivos no caminho entre a rede local e a VM do Google Cloud se eles puderem ser a fonte de problemas de capacidade.

Visão geral de ferramentas para medir a capacidade da rede

Neste tutorial, demonstramos o uso das seguintes ferramentas para calcular a capacidade da rede:

  • iPerf3: uma ferramenta de teste de rede que pode criar streams de dados TCP/UDP (única ou várias linhas de execução) e medir a capacidade da rede que as transporta.

    Observação: o iPerf3 é recomendado apenas para máquinas com uma única CPU.

  • Netperf: uma ferramenta semelhante ao iPerf3, mas adequada para testes de capacidade em instâncias de várias CPUs vinculadas à CPU em uma única CPU.

  • tcpdump: um analisador de pacotes de linha de comando que captura detalhes de pacotes e comunicações TCP/IP para solucionar problemas mais avançados. A ferramenta tcpdump é compatível com outras ferramentas, como o Wireshark.

  • Netstat: um utilitário de rede de linha de comando que exibe conexões de rede para o protocolo de controle de transmissão (de entrada e saída), tabelas de roteamento e várias interfaces de rede (controlador da interface de rede). ou interface de rede definida por software) e estatísticas de protocolo de rede.

  • mtr: uma ferramenta de diagnóstico de rede que realiza funções de traceroute e ping. Ele analisa os roteadores no caminho de rota limitando o número de saltos que os pacotes individuais podem percorrer e detecta as respostas de expiração.

Meça a capacidade com o iPerf3

Siga este procedimento para medir a capacidade de uma única instância de VM.

Escolha um tipo de máquina grande

Para realizar testes de capacidade, use um tipo de máquina grande, como n1-standard-8. Esse tipo de máquina fornece um limite máximo de capacidade de saída de 16 Gbps. Portanto, a capacidade de saída por VM não interfere nos testes.

Instalar as ferramentas

Instalar o iPerf3, mtr, netstat e tcpdump em uma instância de VM do Linux

Para distribuições baseadas em Debian, execute os seguintes comandos:

    sudo apt-get update
    sudo apt-get install iperf3 tcpdump mtr netstat

Para distribuições baseadas em Redhat, execute os seguintes comandos:

    yum update
    yum install iperf3 tcpdump mtr netstat

Instalar o Netperf

Para distribuições baseadas em Debian, execute os seguintes comandos:

    sudo apt-get install git build-essential autoconf texinfo -y
    git clone https://github.com/HewlettPackard/netperf.git
    cd netperf
    ./autogen.sh
    ./configure --enable-histogram --enable-demo=yes
    make
    cp src/netserver ~/.local/bin
    cp src/netperf ~/.local/bin

Para distribuições baseadas em Redhat, execute os seguintes comandos:

    sudo yum install git build-essential autoconf texinfo -y
    git clone https://github.com/HewlettPackard/netperf.git
    cd netperf
    ./autogen.sh
    ./configure --enable-histogram --enable-demo=yes
    make
    cp src/netserver ~/.local/bin
    cp src/netperf ~/.local/bin

Executar os testes de pré-requisito

  1. Verifique se os tamanhos dos anexos da VLAN estão configurados corretamente. Para mais informações, consulte Como modificar anexos da VLAN.
  2. Em ambas as extremidades da conexão (cada terminal), execute o comando top ou htop para monitorar o uso da CPU.
  3. Reúna as estatísticas de rede usando o comando netstat antes de executar qualquer teste.

    netstat -s >> netstat.log
    
  4. Em outro terminal, execute o comando tcpdump antes de qualquer captura com o valor de parâmetro snaplen de 128.

    Execute este comando nos dois endpoints.

    sudo /usr/sbin/tcpdump -s 128 -i [DEVICE_INTERFACE] host [IP_ADDRESS of remote side] -w mycap.pcap
    
  5. Consulte o tamanho da memória de leitura e gravação nos hosts de origem e destino.

    $ sysctl net.ipv4.tcp_rmem
    $ sysctl net.ipv4.tcp_wmem
    $ sysctl net.core.rmem_max
    $ sysctl net.core.rmem_default
    $ net.core.wmem_max
    $ net.core.wmem_default
    $ uname -r
    $ cat /etc/os-release
    

Executar os testes do iperf3

Devido à limitação de 3 Gbps para cada fluxo, recomendamos executar vários streams paralelos de testes iperf3. Recomendamos que você execute no mínimo quatro testes e no máximo dez testes para compensar as limitações de largura de banda e receber resultados úteis.

  1. Em outro terminal, execute o servidor iperf3 em uma extremidade da conexão (uma VM ou uma máquina local). Vários streams exigem vários servidores iperf3.

  2. Execute a ferramenta iPerf3 com a sinalização udp para testes do Cloud Interconnect. Se a capacidade desejada com UDP for alcançada, você precisará realizar mais etapas de solução de problemas.

  3. Para executar os vários servidores iperf3 a partir da linha de comando, execute os seguintes comandos:

    $ iperf3 -s -p 5101&; iperf3 -s -t 30 -p 5102&; iperf3 -s  -p 5103 &
    
  4. Use o seguinte script bash para executar vários servidores iperf3:

    #!/bin/bash
    #start iperf3 server running in background
    
    for i in `seq 0 9`;
    do
            iperf3 -s  -B 10.0.100.35 -t 30 -u -p 521$i &
    done
    

O iperf3 client é executado por 10 segundos por padrão, o que pode não ser suficiente para que o TCP atinja a capacidade máxima. Defina o valor DURATION como pelo menos 30 segundos para alcançar resultados mais confiáveis.

    iperf3 -c [server IP address] -P [THREADS] -t [DURATION]

Script Bash para executar vários streams UDP iperf3

echo "UDP iperf test - 10 streams"
for i in `seq 0 9`;
do
       iperf3 -B 10.0.100.35 -c 192.168.50.3 --logfile ~/gcpvm_client-521$i.log -u -b 1G  -l 1390 -t10 -p 521$i    &

done

Script Bash para executar vários fluxos TCP iperf3

echo "UDP iperf test - 10 streams"
for i in `seq 0 9`;
do
       iperf3 -B 10.0.100.35 -c 192.168.50.3 --logfile ~/gcpvm_client-521$i.log -b 1G  -l 1390 -t10 -p 521$i    &

done

Enquanto o teste iperf3 estiver em execução, monitore a carga da CPU nos dois dispositivos. Se a carga da CPU estiver próxima de 100%, ela será um gargalo para uma linha de execução iperf3. Nesse caso, use a ferramenta Netperf, que é compatível com várias CPUs.

Se você não puder executar o Netperf, poderá iniciar vários servidores iPerf3 e clientes em terminais e portas diferentes simultaneamente.

Analisar os resultados do teste

Siga as etapas abaixo

  1. Verifique os resultados do cliente iperf3 em busca de largura de banda e perda de pacotes.
  2. Verifique se há pacotes fora de ordem nos resultados do servidor iperf3.
  3. Realize a análise de captura de pacotes. Execute o comando a seguir para converter o arquivo pcap em um arquivo de texto.

    tcpdump -A -[PCAP-FILENAME].pcap > [TXT-FILENAME].txt
    
  4. Execute o seguinte comando para ver o total de pacotes e pacotes fora de ordem.

    grep -e "Total" -A1 pcap [TXT-FILENAME]
    

    A saída é esta:

    gcpvm-send-5210.txt:Total UDP packets: 874032
    gcpvm-send-5210.txt:Total out-of-order packets: 0, missing packets: 0
    gcpvm-send-5211.txt:Total UDP packets: 791218
    gcpvm-send-5211.txt:Total out-of-order packets: 0, missing packets: 0
    gcpvm-send-5212.txt:Total UDP packets: 961510
    gcpvm-send-5212.txt:Total out-of-order packets: 0, missing packets: 0
    gcpvm-send-5213.txt:Total UDP packets: 961517
    gcpvm-send-5213.txt:Total out-of-order packets: 0, missing packets: 0
    gcpvm-send-5214.txt:Total UDP packets: 961501
    gcpvm-send-5214.txt:Total out-of-order packets: 0, missing packets: 0
    gcpvm-send-5215.txt:Total UDP packets: 961521
    gcpvm-send-5215.txt:Total out-of-order packets: 0, missing packets: 0
    gcpvm-send-5216.txt:Total UDP packets: 889932
    gcpvm-send-5216.txt:Total out-of-order packets: 0, missing packets: 0
    gcpvm-send-5217.txt:Total UDP packets: 961483
    gcpvm-send-5217.txt:Total out-of-order packets: 0, missing packets: 0
    gcpvm-send-5218.txt:Total UDP packets: 961479
    gcpvm-send-5218.txt:Total out-of-order packets: 0, missing packets: 0
    gcpvm-send-5219.txt:Total UDP packets: 961518
    gcpvm-send-5219.txt:Total out-of-order packets: 0, missing packets: 0
    

    A análise a seguir mostra a perda de pacotes durante um teste de desempenho:

    $ grep -e "Total" -A1 onPrem-send-*.txt
    

    A saída é esta:

    "Total" -A1 onPrem-send-*.txt
    onPrem-send-5210.txt:Total UDP packets: 858698
    onPrem-send-5210.txt:Total out-of-order packets: 0, missing packets: 5408
    --
    onPrem-send-5211.txt:Total UDP packets: 857667
    onPrem-send-5211.txt:Total out-of-order packets: 0, missing packets: 4929
    --
    onPrem-send-5212.txt:Total UDP packets: 857126
    onPrem-send-5212.txt:Total out-of-order packets: 0, missing packets: 5349
    --
    onPrem-send-5213.txt:Total UDP packets: 857424
    onPrem-send-5213.txt:Total out-of-order packets: 0, missing packets: 5495
    --
    onPrem-send-5214.txt:Total UDP packets: 857139
    onPrem-send-5214.txt:Total out-of-order packets: 0, missing packets: 4692
    --
    onPrem-send-5215.txt:Total UDP packets: 857175
    onPrem-send-5215.txt:Total out-of-order packets: 0, missing packets: 4789
    --
    onPrem-send-5216.txt:Total UDP packets: 857104
    onPrem-send-5216.txt:Total out-of-order packets: 0, missing packets: 5196
    --
    onPrem-send-5217.txt:Total UDP packets: 857122
    onPrem-send-5217.txt:Total out-of-order packets: 0, missing packets: 5423
    --
    onPrem-send-5218.txt:Total UDP packets: 857383
    onPrem-send-5218.txt:Total out-of-order packets: 0, missing packets: 5283
    --
    onPrem-send-5219.txt:Total UDP packets: 857313
    onPrem-send-5219.txt:Total out-of-order packets: 0, missing packets: 4934
    
  5. Acesse a página do dispositivo para verificar a capacidade da porta.

  6. Se a saída netstat mostrar erros de leitura/gravação, o ajuste do fluxo em massa TCP/UDP poderá ser necessário.

  7. Se houver pacotes fora de ordem, as capturas de pacote precisarão ser realizadas nos gateways da VPN para análise mais detalhada. Para mais informações sobre como realizar capturas de pacotes nos gateways de VPN, abra um caso de suporte.

  8. Se o teste UDP iperf3 alcançar a capacidade desejada, o problema precisará estar em outro lugar e o ajuste TCP poderá ser necessário.