Eu tenho um servidor com uma conexão de 10 GbE para um switch e 10 clientes, cada um com uma conexão de 1 GbE para o mesmo switch.
Executando o nuttcp em paralelo em cada um dos clientes, posso enviar 10 fluxos TCP de dados para o servidor simultaneamente a uma velocidade aproximada (isto é, pouco mais de 100 megabytes por segundo dos 10 clientes simultaneamente).
No entanto, quando eu inverto a direção e envio dados do servidor para os clientes - isto é, 10 fluxos TCP, um indo para cada cliente - o aumento das retransmissões TCP e o desempenho cai para 30, 20 ou até 10 megabytes por segundo por cliente. Eu quero aumentar esses números, porque esse padrão de tráfego é representativo de certos aplicativos que me interessam.
Verifiquei que meu servidor é capaz de saturar um link de 10 GbE executando a mesma experiência em uma conexão de 10 GbE com um servidor semelhante. Verifiquei que não há erros em nenhuma das minhas portas.
Por fim, quando forço a limitar (limitar) o tamanho da janela TCP do receptor, posso aumentar a largura de banda (30 a 40 megabytes / s); e se eu o fixar extremamente baixo, posso fazer com que as retransmissões fiquem zeradas (com a largura de banda ridiculamente baixa).
Assim, estou razoavelmente confiante de que estou excedendo os buffers no meu switch, resultando em perda de pacotes devido ao congestionamento. No entanto, eu pensei que o controle de congestionamento do TCP deveria lidar com isso bem, eventualmente estabilizando em algo acima de 50% da velocidade do fio.
Então, minha primeira pergunta é muito simples: Qual algoritmo de controle de congestionamento TCP seria melhor para minha situação? Há uma tonelada deles disponível, mas na maioria das vezes parecem ser voltados para redes com perdas ou redes de alta latência de alta largura de banda ou redes sem fio ... Nada disso se aplica à minha situação.
Segunda pergunta: Há mais alguma coisa que eu possa tentar?