Eu tenho experimentado com os parâmetros TCP no Linux (com um kernel 3.5). Basicamente sobre esta conexão:
Servidor: Uplink Gigabit no datacenter, a largura de banda real (devido ao compartilhamento de uplinks) é de cerca de 70 MB / s quando testada em outro datacenter.
Cliente: LAN local Gigabit conectada à fibra de 200mbit. A busca de um arquivo de teste atinge 20 MB / s.
Latência: cerca de 50 ms ida e volta.
O servidor remoto é usado como servidor de arquivos para arquivos na faixa de 10 a 100mb. Notei que, usando um initcwnd de 10, o tempo de transferência para esses arquivos é fortemente afetado pelo início lento do TCP, levando 3,5 segundos para carregar 10mb (velocidade máxima atingida: 3,3 MB / s) porque ele começa devagar e aumenta a velocidade. termina antes que a velocidade máxima seja atingida. Meu objetivo é ajustar os tempos mínimos de carregamento desses arquivos (para não obter maior taxa de transferência bruta ou menor latência de ida e volta, estou disposto a sacrificar os dois se isso diminuir o tempo real necessário para carregar um arquivo)
Então, tentei um cálculo simples para determinar qual deveria ser o initcwnd ideal, ignorando outras conexões e o possível impacto sobre os outros. O produto do atraso da largura de banda é de 200 Mbit / s * 50 ms = 10 Mbit ou 1.310.720 bytes. Considerando que o initcwnd está definido em unidades do MSS e assumindo que o MSS esteja em torno de 1400 bytes, será necessária uma configuração de: 1.310.720 / 1400 = 936
Esse valor está muito longe do padrão (10 * MSS no Linux, 64kb no Windows), portanto, não é uma boa ideia configurá-lo dessa maneira. Quais são as desvantagens esperadas de configurá-lo assim? Por exemplo:
- Isso afetará outros usuários da mesma rede?
- Poderia criar congestionamento inaceitável para outras conexões?
- Inundar buffers de roteador em algum lugar no caminho?
- Aumentar o impacto de pequenas quantidades de perda de pacotes?
70 MB/s
e não megabits? Apenas procurando esclarecimentos.