Ho una scatola Linux che uso come iperf3
client, testando 2 scatole server Windows 2012 R2 identicamente equipaggiate con Broadcom BCM5721, adattatori da 1 GB (2 porte, ma solo 1 usato per il test). Tutte le macchine sono collegate tramite un singolo interruttore da 1 Gb.
Test di UDP ad es. 300Mbit
iperf3 -uZVc 192.168.30.161 -b300m -t5 --get-server-output -l8192
provoca la perdita del 14% di tutti i pacchetti inviati (per l'altro server box con lo stesso hardware esatto, ma driver NIC meno recenti, la perdita è di circa il 2%), ma la perdita si verifica anche a 50Mbit, anche se in modo meno grave. Prestazioni TCP utilizzando impostazioni equivalenti:
iperf3 -ZVc 192.168.30.161 -t5 --get-server-output -l8192
produce velocità di trasmissione a nord di 800 Mbit, senza ritrasmissioni segnalate.
Il server viene sempre avviato utilizzando le seguenti opzioni:
iperf3 -sB192.168.30.161
Di chi è la colpa?
La casella client linux (hardware? Driver? Impostazioni?)?Modifica: ho appena eseguito il test da una casella del server Windows all'altra e la perdita di pacchetti UDP a 300Mbit era ancora maggiore, al 22%- Le finestre del server Windows (hardware? Driver? Impostazioni?)?
- L'interruttore (singolo) che collega tutte le macchine di prova?
- Cavi?
Modificare:
Ora ho provato nella direzione opposta: Windows -> Linux. Risultato: la perdita di pacchetti è sempre pari a 0 , mentre il throughput raggiunge il limite massimo
- 840 Mbit per
-l8192
, cioè pacchetti IP frammentati - 250Mbit per
-l1472
pacchetti IP non frammentati
Immagino che il throughput dei limiti di controllo del flusso prevenga la perdita di pacchetti. Soprattutto quest'ultima cifra non frammentata non si avvicina affatto al throughput TCP (TCP non frammentato produce cifre simili al TCP frammentato), ma è un miglioramento infinitamente enorme rispetto a Linux -> Windows in termini di perdita di pacchetti.
E come scoprirlo?
Ho seguito i consueti consigli per le impostazioni del driver sul server per massimizzare le prestazioni e ho cercato di abilitare / disabilitare / massimizzare / minimizzare / cambiare
- Interrompere la moderazione
- Controllo del flusso
- Buffer di ricezione
- RSS
- Wake-on-LAN
Tutte le funzionalità di offload sono abilitate.
Modifica Ho anche provato ad abilitare / disabilitare
- Ethernet @ Wirespeed
- Le varie funzionalità di offload
- Priorità e VLAN
Con tassi di perdita simili.
L'output completo di un'esecuzione 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%)
Esecuzione 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