Eu tenho uma caixa Linux que uso como iperf3
cliente, testando 2 caixas de servidor Windows 2012 R2 equipadas de forma idêntica com adaptadores Broadcom BCM5721, de 1 Gb (2 portas, mas apenas 1 usada para o teste). Todas as máquinas são conectadas através de um único switch de 1Gb.
Testando UDP em, por exemplo, 300Mbit
iperf3 -uZVc 192.168.30.161 -b300m -t5 --get-server-output -l8192
resulta na perda de 14% de todos os pacotes enviados (para a outra caixa de servidor com exatamente o mesmo hardware, mas com drivers de NIC mais antigos, a perda é de cerca de 2%), mas a perda ocorre mesmo a 50Mbit, embora com menor gravidade. Desempenho do TCP usando configurações equivalentes:
iperf3 -ZVc 192.168.30.161 -t5 --get-server-output -l8192
produz velocidades de transmissão ao norte de 800Mbit, sem retransmissões relatadas.
O servidor é sempre iniciado usando as seguintes opções:
iperf3 -sB192.168.30.161
Quem é o culpado?
A caixa do cliente linux (hardware? Drivers? Configurações?)?Edit: Acabei de executar o teste de uma caixa de servidor Windows para a outra e a perda de pacotes UDP a 300Mbit foi ainda maior, a 22%- As caixas do servidor Windows (hardware? Driver? Configurações?)?
- O comutador (único) que conecta todas as máquinas de teste?
- Cabos?
Editar:
Agora eu tentei a outra direção: Windows -> Linux. Resultado: a perda de pacotes sempre é 0 , enquanto a taxa de transferência atinge o valor máximo em torno de
- 840Mbit para
-l8192
, ou seja, pacotes IP fragmentados - 250Mbit para
-l1472
pacotes IP não fragmentados
Eu acho que o controle de fluxo limita o rendimento e evita a perda de pacotes. Especialmente neste último, o número não fragmentado não está nem perto do throughput TCP (o TCP não fragmentado gera números semelhantes ao TCP fragmentado), mas é uma melhoria infinitamente grande em relação ao Linux -> Windows em termos de perda de pacotes.
E como descobrir?
Eu segui o conselho usual para as configurações do driver no servidor para maximizar o desempenho e tentei ativar / desativar / maximizar / minimizar / alterar
- Moderação de interrupção
- Controle de fluxo
- Buffers de recebimento
- RSS
- Wake-on-LAN
Todos os recursos de transferência estão ativados.
Editar Também tentei ativar / desativar
- Ethernet @ Wirespeed
- Os vários recursos de transferência
- Prioridade e VLAN
Com taxas de perda semelhantes.
A saída completa de uma execução UDP:
$ iperf3 -uZVc 192.168.30.161 -b300m -t5 --get-server-output -l8192
iperf 3.0.7
Linux mybox 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt4-3 (2015-02-03) x86_64 GNU/Linux
Time: Wed, 13 May 2015 13:10:39 GMT
Connecting to host 192.168.30.161, port 5201
Cookie: mybox.1431522639.098587.3451f174
[ 4] local 192.168.30.202 port 50851 connected to 192.168.30.161 port 5201
Starting Test: protocol: UDP, 1 streams, 8192 byte blocks, omitting 0 seconds, 5 second test
[ ID] Interval Transfer Bandwidth Total Datagrams
[ 4] 0.00-1.00 sec 33.3 MBytes 279 Mbits/sec 4262
[ 4] 1.00-2.00 sec 35.8 MBytes 300 Mbits/sec 4577
[ 4] 2.00-3.00 sec 35.8 MBytes 300 Mbits/sec 4578
[ 4] 3.00-4.00 sec 35.8 MBytes 300 Mbits/sec 4578
[ 4] 4.00-5.00 sec 35.8 MBytes 300 Mbits/sec 4577
- - - - - - - - - - - - - - - - - - - - - - - - -
Test Complete. Summary Results:
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[ 4] 0.00-5.00 sec 176 MBytes 296 Mbits/sec 0.053 ms 3216/22571 (14%)
[ 4] Sent 22571 datagrams
CPU Utilization: local/sender 4.7% (0.4%u/4.3%s), remote/receiver 1.7% (0.8%u/0.9%s)
Server output:
-----------------------------------------------------------
Accepted connection from 192.168.30.202, port 44770
[ 5] local 192.168.30.161 port 5201 connected to 192.168.30.202 port 50851
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[ 5] 0.00-1.01 sec 27.2 MBytes 226 Mbits/sec 0.043 ms 781/4261 (18%)
[ 5] 1.01-2.01 sec 30.0 MBytes 252 Mbits/sec 0.058 ms 734/4577 (16%)
[ 5] 2.01-3.01 sec 29.0 MBytes 243 Mbits/sec 0.045 ms 870/4578 (19%)
[ 5] 3.01-4.01 sec 32.1 MBytes 269 Mbits/sec 0.037 ms 469/4579 (10%)
[ 5] 4.01-5.01 sec 32.9 MBytes 276 Mbits/sec 0.053 ms 362/4576 (7.9%)
Execução TCP:
$ iperf3 -ZVc 192.168.30.161 -t5 --get-server-output -l8192
iperf 3.0.7
Linux mybox 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt4-3 (2015-02-03) x86_64 GNU/Linux
Time: Wed, 13 May 2015 13:13:53 GMT
Connecting to host 192.168.30.161, port 5201
Cookie: mybox.1431522833.505583.4078fcc1
TCP MSS: 1448 (default)
[ 4] local 192.168.30.202 port 44782 connected to 192.168.30.161 port 5201
Starting Test: protocol: TCP, 1 streams, 8192 byte blocks, omitting 0 seconds, 5 second test
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-1.00 sec 109 MBytes 910 Mbits/sec 0 91.9 KBytes
[ 4] 1.00-2.00 sec 97.3 MBytes 816 Mbits/sec 0 91.9 KBytes
[ 4] 2.00-3.00 sec 97.5 MBytes 818 Mbits/sec 0 91.9 KBytes
[ 4] 3.00-4.00 sec 98.0 MBytes 822 Mbits/sec 0 91.9 KBytes
[ 4] 4.00-5.00 sec 97.6 MBytes 819 Mbits/sec 0 91.9 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
Test Complete. Summary Results:
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-5.00 sec 499 MBytes 837 Mbits/sec 0 sender
[ 4] 0.00-5.00 sec 498 MBytes 836 Mbits/sec receiver
CPU Utilization: local/sender 3.5% (0.5%u/3.0%s), remote/receiver 4.5% (2.0%u/2.5%s)
Server output:
-----------------------------------------------------------
Accepted connection from 192.168.30.202, port 44781
[ 5] local 192.168.30.161 port 5201 connected to 192.168.30.202 port 44782
[ ID] Interval Transfer Bandwidth
[ 5] 0.00-1.00 sec 105 MBytes 878 Mbits/sec
[ 5] 1.00-2.00 sec 97.5 MBytes 818 Mbits/sec
[ 5] 2.00-3.00 sec 97.6 MBytes 819 Mbits/sec
[ 5] 3.00-4.00 sec 97.8 MBytes 820 Mbits/sec
[ 5] 4.00-5.00 sec 97.7 MBytes 820 Mbits/sec
fonte
-l
switch faz. Não define o tamanho do buffer; define o tamanho do pacote. Essa é a quantidade de dados que o iperf3 gravará no soquete de uma só vez e lerá do soquete de uma só vez. Você pode definir o tamanho do buffer do soquete usando-w
. Se você olhar a fonte, verá que ela chamasetsockopt()
para definir o tamanho do buffer do soquete para o que você especificou depois-w
.Você perdeu completamente o culpado mais óbvio - os adaptadores e, em seguida, os drivers (você afirma que o uso de drivers de versão diferentes gera resultados diferentes).
Tente desativar todos os recursos de transferência.
fonte