No momento, estou examinando o desempenho (especialmente a taxa de transferência UDP) de diferentes redes de sobreposição do Docker. Eu faço isso criando conexões ponto a ponto entre dois hosts que estão conectados com uma rede de sobreposição do Docker e, em seguida, executo iperf
dentro dos contêineres do Docker para examinar a taxa de transferência. Percebi que sempre que estou executando iperf
como cliente para enviar dados para outro contêiner que é executado iperf
como servidor, o uso da CPU do host do cliente chega a 100%. Eu obtive esse resultado executando o seguinte comando que encontrei aqui :
top -bn1 | grep "Cpu(s)" | \
sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | \
awk '{print 100 - $1"%"}'
Então, para mim, parece que o fator limitante dos meus testes de throughput é a capacidade da CPU do meu host, pois ele roda a 100% e não consegue gerar mais tráfego para saturar a conexão de rede. Eu estou querendo saber se este é um iperf
problema específico, então eu queria executar os mesmos testes com uma ferramenta diferente, mas não tenho certeza de qual alternativa seria melhor . Os hosts estão executando o Ubuntu. Por exemplo, encontrei qperf
, uperf
e netpipe
.
Além disso, de maneira mais geral, comecei a me perguntar qual é normalmente o gargalo para o desempenho da taxa de transferência. Não é sempre a capacidade da CPU ou a largura de banda do link? Que são fatores que não estão diretamente relacionados às redes overlay.
Isso significa que a taxa de transferência de um aplicativo (ou rede de sobreposição) depende apenas de quantos ciclos de CPU ele precisa para transferir uma certa quantidade de dados e como ele os compacta para ajustá-los à rede (se esse for o gargalo).
O UDP é vinculado à CPU e à largura de banda . Envia pacotes sem garantir que sejam enviados, transmitidos ou recebidos.
De um modo geral, os desempenhos do UDP não têm sentido. Nada impede que você tente enviar 1 bazilhão de pacotes por segundo. Isso satura a CPU do remetente e a rede, enquanto o destinatário pode não receber muita coisa.
Se você realmente deseja testar o UDP, esse é um tópico bastante longo que merece um livro. Para começar, você precisa monitorar as taxas de erro e quais dados são realmente enviados/recebidos.
Você deve testar com TCP para medir a largura de banda disponível entre os hosts.
iperf
deve ser capaz de fazer isso muito bem.