Maneira correta de medir o desempenho da rede de sobreposição

7

No momento, estou examinando o desempenho (especialmente a taxa de transferência UDP) de diferentes redes de sobreposição do Docker. Isso é feito criando conexões ponto-a-ponto entre dois hosts conectados a uma rede de sobreposição do Docker e, em seguida, executando iperf nos contêineres do Docker para examinar a taxa de transferência. Percebi que toda vez que eu estou executando iperf como um cliente para enviar dados para o outro contêiner que executa iperf como um servidor, o uso da CPU do host do cliente atinge 100%. Eu obtive esse resultado executando o seguinte comando que encontrei em aqui :

top -bn1 | grep "Cpu(s)" | \
       sed "s/.*, *\([0-9.]*\)%* id.*//" | \
       awk '{print 100 - $1"%"}'

Então, para mim, parece que o fator limitante dos meus testes de throughput é a capacidade de CPU do meu host, já que ele é executado a 100% e não é capaz de gerar mais tráfego para saturar a conexão de rede. Eu estou querendo saber se este é um problema iperf específico, então eu queria executar os mesmos testes com uma ferramenta diferente, mas não tenho certeza qual alternativa seria melhor . Os anfitriões estão executando o Ubuntu. Por exemplo, encontrei qperf , uperf e netpipe .

Além disso, de forma mais geral, comecei a me perguntar qual seria o gargalo para o desempenho da taxa de transferência. Não é sempre a capacidade da CPU ou a largura de banda do link? Quais são os fatores que não estão diretamente relacionados às redes de sobreposição.

Isso significa que a taxa de transferência de uma aplicação (ou sobreposição de rede) depende apenas de quantos ciclos de CPU ela precisa para transferir uma certa quantidade de dados e como ela é comprimida para ajustá-los à rede (se essa for a gargalo).

    
por arne.z 13.04.2016 / 15:37

1 resposta

1

O UDP está ligado à CPU e à largura de banda . Envia pacotes sem garantir que eles sejam enviados, transmitidos ou recebidos.

  • Se a CPU do remetente estiver muito ocupada, o pacote nunca será enviado.
  • Se a largura de banda não puder acompanhar, os pacotes são descartados em trânsito.
  • Se a CPU do receptor estiver muito ocupada ou não estiver pronta para processar dados da rede de entrada, ela será perdida.
  • Se o aplicativo não extrair os pacotes do sistema operacional (e processá-los) com rapidez suficiente, eles serão perdidos.

De um modo geral, os desempenhos UDP não têm sentido. Nada impede que você tente enviar pacotes de 1 bilhão por segundo. Isso satura a CPU e a rede do remetente, enquanto o receptor pode não receber muita coisa.

Se você realmente quiser testar o UDP, esse é um tópico bastante longo e digno de um livro. Para começar, você precisa monitorar as taxas de erro e quais dados são realmente enviados / recebidos.

Você deve testar com o TCP para medir a largura de banda disponível entre os hosts. iperf deve ser capaz de fazer isso bem.

    
por 29.04.2017 / 22:27