Em um teste de taxa de transferência TCP WLAN iperf TCP, vários fluxos paralelos me proporcionam uma taxa de transferência superior a 1 fluxo. Tentei aumentar o tamanho da janela TCP, mas ainda não consigo atingir a taxa de transferência máxima com apenas 1 fluxo. Há algo mais na camada TCP que está impedindo que a capacidade total do link seja usada?
12
Respostas:
Na minha experiência, se você ver resultados significativamente diferentes entre 1 fluxo TCP e vários fluxos TCP, o problema normalmente é perda de pacotes; portanto, a "outra coisa" na camada TCP é a retransmissão (devido à perda de pacotes na camada inferior).
Um exemplo que eu criei para ilustrar como a perda de pacotes afeta a taxa de transferência de fluxo único ...
Esta é uma tabela que resume os resultados de um teste de 60 segundos
iperf
entre um cliente e servidor ... você pode ver uma pequena variação nos resultados do iperf do jitter RTT (ou seja, desvio padrão maior do RTT); no entanto, a diferença mais significativa ocorreu quando simulei 2% de perda, deixando o cliente conectado à NIC. 172.16.1.56 e 172.16.1.80 são o mesmo laptop (executando o Ubuntu). O servidor é 172.16.1.5, executando o Debian. Eu usei o netem na NIC com fio do cliente para simular a perda de pacotes ...EDIT para respostas aos comentários :
A maioria das implementações de TCP diminui sua janela de congestionamento quando a perda de pacotes é detectada. Como estamos usando o netem para forçar 2% de perda de pacotes do cliente para o servidor, alguns dos dados do cliente são descartados. O efeito líquido do netem neste exemplo é uma taxa de transmissão média de fluxo único de 730 Mbps. Adicionar múltiplos fluxos significa que os fluxos TCP individuais podem trabalhar juntos para saturar o link.
sim
Eu realmente não posso responder isso sem mais experimentos, mas para os links 1GE, nunca tive um problema em saturar um link com 5 fluxos paralelos. Para ter uma idéia de como o TCP é escalável, os servidores Linux podem manipular mais de 1500 soquetes TCP simultâneos nas circunstâncias certas. Essa é outra discussão da SO que é relevante para dimensionar soquetes TCP simultâneos, mas, na minha opinião, qualquer coisa acima de 20 soquetes paralelos seria um exagero se você estiver apenas tentando saturar um link.
Eu não usei
iperf -w
, então acho que há um mal-entendido. Como você tem muitas perguntas sobre o caso do wifi, estou incluindo um gráfico wireshark da taxa de transferência TCP para o caso de fluxo TCP único do wifi.Dados de teste
Também estou incluindo dados brutos de teste, caso você queira ver como eu medi essas coisas ...
802.11g, 1 fluxo TCP
802.11g, 5 fluxos TCP
1000BaseT, 1 Stream, perda de 0,0%
1000BaseT, 5 fluxos, perda de 0,0%
1000BaseT, 1 fluxos, perda de 2,0%
1000BaseT, 5 fluxos, perda de 2,0%
Remover simulação de perda de pacotes
fonte
Aqui está o cálculo para a taxa de transferência máxima de um único fluxo TCP.
Portanto, você tem um gargalo e a latência desempenha um papel importante.
fonte
Provavelmente é devido a vários processos versus um processo. com o iperf 2.0.9, é possível testar isso via -P 2 no cliente. Isso irá bifurcar dois threads em vez de um. As CPUs mais modernas têm vários núcleos, portanto, o uso de vários threads poderá aproveitá-los.
fonte