Tengo una caja de Linux que uso como iperf3
cliente, probando 2 cajas de servidor Windows 2012 R2 con equipos idénticos con Broadcom BCM5721, adaptadores de 1 Gb (2 puertos, pero solo 1 usado para la prueba). Todas las máquinas están conectadas a través de un solo interruptor de 1 Gb.
Prueba de UDP a, por ejemplo, 300Mbit
iperf3 -uZVc 192.168.30.161 -b300m -t5 --get-server-output -l8192
da como resultado la pérdida del 14% de todos los paquetes enviados (para la otra caja del servidor con exactamente el mismo hardware, pero los controladores NIC más antiguos, la pérdida es de alrededor del 2%), pero la pérdida ocurre incluso a 50 Mbit, aunque con menos severidad. Rendimiento TCP utilizando configuraciones equivalentes:
iperf3 -ZVc 192.168.30.161 -t5 --get-server-output -l8192
produce velocidades de transmisión al norte de 800Mbit, sin retransmisiones reportadas.
El servidor siempre se inicia utilizando las siguientes opciones:
iperf3 -sB192.168.30.161
¿De quien es la culpa?
¿La caja del cliente de Linux (hardware, controladores, configuración?)Editar: acabo de ejecutar la prueba de una caja de servidor de Windows a la otra y la pérdida de paquetes UDP a 300Mbit fue aún mayor, al 22%- ¿Las cajas del servidor de Windows (hardware, controlador, configuración)?
- ¿El interruptor (único) que conecta todas las máquinas de prueba?
- Cables?
Editar:
Ahora probé la otra dirección: Windows -> Linux. Resultado: la pérdida de paquetes siempre es 0 , mientras que el rendimiento se maximiza alrededor de
- 840Mbit para
-l8192
, es decir, paquetes IP fragmentados - 250Mbit para
-l1472
paquetes IP no fragmentados
Supongo que el control de flujo limita el rendimiento y evita la pérdida de paquetes. Especialmente el último, la cifra no fragmentada no está cerca del rendimiento del TCP (el TCP no fragmentado produce cifras similares al TCP fragmentado), pero es una mejora infinitamente enorme sobre Linux -> Windows en términos de pérdida de paquetes.
¿Y cómo averiguarlo?
Seguí los consejos habituales para la configuración del controlador en el servidor para maximizar el rendimiento e intenté habilitar / deshabilitar / maximizar / minimizar / cambiar
- Moderación de interrupción
- Control de flujo
- Recibir tampones
- RSS
- Activación de la LAN
Todas las funciones de descarga están habilitadas.
Editar También intenté habilitar / deshabilitar
- Ethernet @ velocidad del cable
- Las diversas funciones de descarga
- Prioridad y VLAN
Con tasas de pérdida similares.
La salida completa de una ejecución 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%)
TCP ejecutado:
$ 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
fuente
-l
interruptor. No establece el tamaño del búfer; Establece el tamaño del paquete. Esta es la cantidad de datos que iperf3 escribirá en el socket de una vez y leerá desde el socket de una vez. Puede establecer el tamaño del búfer de socket usando-w
. Si observa la fuente, verá que llamasetsockopt()
para establecer el tamaño del búfer de socket a lo que especificó después-w
.Te perdiste por completo al culpable más obvio: los adaptadores y luego los controladores (afirmas que usar una versión diferente de los controladores produce resultados diferentes).
Intente desactivar todas las capacidades de descarga.
fuente