En una prueba de rendimiento WLAN iperf TCP, múltiples flujos paralelos me darán un mayor rendimiento que 1 flujo. Intenté aumentar el tamaño de la ventana TCP, pero aún no puedo lograr el rendimiento máximo con solo 1 flujo. ¿Hay algo más en la capa TCP que impida que se use toda la capacidad del enlace?
12
Respuestas:
En mi experiencia, si ve resultados significativamente diferentes entre 1 flujo TCP y múltiples flujos TCP, el problema es normalmente la pérdida de paquetes; entonces el "algo más" en la capa TCP es la retransmisión (debido a la pérdida de paquetes de la capa inferior).
Un ejemplo que preparé para ilustrar cómo la pérdida de paquetes afecta el rendimiento de una sola secuencia ...
Esta es una tabla que resume los resultados de una prueba de 60 segundos
iperf
entre un cliente y un servidor ... es posible que vea una pequeña variación en los resultados de iperf del jitter RTT (es decir, una desviación estándar RTT más alta); Sin embargo, la diferencia más significativa se produjo cuando simulé una pérdida del 2% dejando al cliente con cable NIC. 172.16.1.56 y 172.16.1.80 son la misma computadora portátil (con Ubuntu). El servidor es 172.16.1.5 y ejecuta Debian. Solía NetEm en el cliente conectado NIC para simular la pérdida de paquetes ...EDITAR para respuestas de comentarios :
La mayoría de las implementaciones de TCP disminuyen su ventana de congestión cuando se detecta la pérdida de paquetes. Como estamos usando netem para forzar una pérdida de paquetes del 2% del cliente al servidor, algunos de los datos del cliente se descartan. El efecto neto de netem en este ejemplo es una velocidad de transmisión promedio de flujo único de 730Mbps. Agregar múltiples flujos significa que los flujos TCP individuales pueden trabajar juntos para saturar el enlace.
si
Realmente no puedo responder eso sin más experimentos, pero para los enlaces 1GE, nunca he tenido problemas para saturar un enlace con 5 flujos paralelos. Para darle una idea de cuán escalable es TCP, los servidores Linux pueden manejar más de 1500 sockets TCP concurrentes en las circunstancias correctas. Esta es otra discusión SO que es relevante para escalar sockets TCP concurrentes, pero en mi opinión, cualquier cosa por encima de 20 sockets paralelos sería excesivo si simplemente está tratando de saturar un enlace.
No lo usé
iperf -w
, así que creo que hay un malentendido. Dado que tiene tantas preguntas sobre el caso de wifi, incluyo un gráfico wirehark del rendimiento de TCP para el caso de flujo de TCP único wifi.Datos de prueba
También incluyo datos de prueba sin procesar en caso de que desee ver cómo medí estas cosas ...
802.11g, 1 flujo TCP
802.11g, 5 flujos TCP
1000BaseT, 1 transmisión, pérdida del 0.0%
1000BaseT, 5 transmisiones, pérdida del 0.0%
1000BaseT, 1 Streams, 2.0% de pérdida
1000BaseT, 5 transmisiones, pérdida del 2.0%
Eliminar la simulación de pérdida de paquetes
fuente
Aquí está el cálculo para el rendimiento máximo de una sola transmisión tcp.
Entonces tiene un cuello de botella y la latencia juega un papel importante.
fuente
Probablemente se deba a múltiples procesos versus un proceso. con iperf 2.0.9 se puede probar esto a través de -P 2 en el cliente. Esto bifurcará dos hilos en lugar de uno. La mayoría de las CPU modernas tienen múltiples núcleos, por lo que usar múltiples hilos podrá aprovecharlas.
fuente