Por que a taxa de transferência é diferente usando o netperf?

1

Estou usando o netperf no sistema operacional Windows, com dois computadores conectados por cabo cross-over. O primeiro PC está usando um controlador de rede Realtek FE, e o segundo PC possui um controlador Realtek GBE.

Com o primeiro PC como servidor, e segundo como cliente, obtenho resultados como este:

Recv   Send    Send                          
Socket Socket  Message  Elapsed              
Size   Size    Size     Time     Throughput  
bytes  bytes   bytes    secs.    10^6bits/sec  

  8192  65536  65536    10.00      95.11  

Quando eu troco as coisas pelo segundo PC é o servidor, e primeiro é cliente eu recebo resultados como este:

Recv   Send    Send                          
Socket Socket  Message  Elapsed              
Size   Size    Size     Time     Throughput  
bytes  bytes   bytes    secs.    10^6bits/sec  

  65536  8192  8192    10.00      50.11   

Por que a taxa de transferência é diferente nesses dois casos?

    
por RockLegend 19.03.2015 / 21:12

1 resposta

1

Provavelmente, porque uma das máquinas está usando uma janela TCP mal ajustada (a Netperf aparentemente chama isso de RecV Socket Size). Durante o handshake de 3 vias TCP que abre uma conexão TCP, cada host comunica o tamanho da janela TCP que pode manipular ao receber, assim o outro host sabe quantos dados colocar em vôo antes de esperar por um TCP Ack.

8 KiB (8.192 Bytes = 65.536 bits) não permite que dados suficientes sejam colocados em operação, considerando uma rede de 100.000.000 bps e um RTT estimado (tempo de ida e volta == tempo de ping) de 1 ms.

Para calcular uma janela TCP apropriada para usar, você precisa calcular seu "Produto de Atraso de Largura de Banda" (BDP). Ping uma máquina do outro e observe o tempo de ping. Na minha movimentada LAN GigE, é cerca de 1ms agora. Eu acho que é um pouco alto para o GigE, mas vamos em frente, já que uma extremidade do seu link é apenas 100BASE-TX.

100.000.000 bits por segundo * 0,001 segundo (1 ms) RTT = 100.000 bits

100.000 bits / 8 bits por Byte = 12.500 Bytes

12.500 Bytes / 1024 Bytes por KibiByte = 12,2 KiB

Portanto, sua janela de recebimento de TCP na máquina lenta precisa ser pelo menos 50% maior do que é (12.2 em vez de 8 KiB).

Então, novamente, se você estiver usando um sistema operacional moderno como o Windows 8.x, essa resposta não deve se aplicar, porque seus hosts devem ter o ajuste automático da janela TCP, para que os valores reportados inicialmente possam não ser confiáveis. Se você estiver usando um sistema operacional antigo, como o Windows XP, ou se o ajuste automático da janela TCP estiver desativado ou não estiver funcionando por algum motivo, isso se aplica.

    
por 20.03.2015 / 01:44