Controle de congestionamento TCP para redes de baixa latência 10GbE - 1GbE?

11

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?

    
por Nemo 20.03.2013 / 02:33

1 resposta

2

  1. Você deseja um algoritmo onde o tamanho da janela não seja drasticamente reduzido quando houver uma queda de pacotes. É a queda drástica no tamanho da janela que resulta na queda repentina na taxa de transferência com o tráfego TCP.

  2. Se o seu switch e seu servidor suportarem controle de fluxo, tente ativar o controle de fluxo. O quanto isso funciona depende quase inteiramente do silício e do firmware do Switch. Basicamente, o switch detectará o congestionamento de saída na porta que está conectada a um cliente, determinará de onde os pacotes vieram e enviará quadros de controle de fluxo pela porta de ingresso (ou seja, de volta ao servidor). Se o servidor entender os quadros de controle de fluxo, reduzirá a velocidade de transmissão. Se tudo funcionar bem, você obterá uma taxa de transferência ideal, com praticamente zero gotas de pacotes ocorrendo no buffer de saída do switch.

por 22.03.2013 / 05:11