Arreglando problemas de escalado de ventanas con Linux TCP

8

Estoy tratando de mejorar el rendimiento de uno de mis servidores en el extranjero y después de monitorear una transferencia entre el servidor y la computadora de mi casa con wireshark, estoy bastante seguro de que tengo un problema con el tamaño de la ventana.

Para una transferencia ftp obtengo un tamaño de ventana de recepción de 14720.

Window size value: 115
Calculated window size: 14720
Window size scaling factor: 128

Mi ventana de envío se parece a lo que configuré:

Window size value: 65335
Calculated window size: 261340
Window size scaling factor: 4

Entonces, ¿cómo arreglo la ventana r? He revisado la configuración de Linux tcp en mi servidor y todo parece normal. Las marcas de tiempo están activadas, las syncookies están desactivadas, la escala está activada, los sacos están activados, el método de control de congestión es cúbico, el tamaño máximo de la ventana de recepción y envío es de 3mb. Intenté cambiar los valores predeterminados tcp_wmem y tcp_rmem pero no hace nada.

EDITAR:

Cuando apago el autoajuste y / o el escalado de ventanas en el servidor, la ventana se reduce a 14600, que es básicamente 10 veces el MSS.

5337    4.268584    2.2.2.2 1.1.1.1 FTP 106 Response: 227 Entering Passive Mode (2,2,2,2,240,15).
5338    4.268640    1.1.1.1 2.2.2.2 TCP 74  59855 > 61455 [SYN] Seq=0 Win=14600 Len=0 MSS=1460 SACK_PERM=1 TSval=431721460 TSecr=0 WS=128
5364    4.300368    1.1.1.1 2.2.2.2 TCP 54  57609 > ftp [ACK] Seq=217 Ack=648 Win=15744 Len=0
5480    4.346856    2.2.2.2 1.1.1.1 TCP 66  61455 > 59855 [SYN, ACK] Seq=0 Ack=1 Win=5840 Len=0 MSS=1460 SACK_PERM=1 WS=128
5481    4.346867    1.1.1.1 2.2.2.2 TCP 54  59855 > 61455 [ACK] Seq=1 Ack=1 Win=14720 Len=0
5482    4.346893    1.1.1.1 2.2.2.2 FTP 70  Request: STOR 100mb.bin
5570    4.428061    2.2.2.2 1.1.1.1 FTP 109 Response: 150 Opening BINARY mode data connection for 100mb.bin
5571    4.428078    1.1.1.1 2.2.2.2 TCP 54  57609 > ftp [ACK] Seq=233 Ack=703 Win=15744 Len=0
5572    4.428155    1.1.1.1 2.2.2.2 FTP-DATA    2974    FTP Data: 2920 bytes
5573    4.428166    1.1.1.1 2.2.2.2 FTP-DATA    1514    FTP Data: 1460 bytes
5662    4.505384    2.2.2.2 1.1.1.1 TCP 60  61455 > 59855 [ACK] Seq=1 Ack=1461 Win=8832 Len=0
5663    4.505392    1.1.1.1 2.2.2.2 FTP-DATA    2974    FTP Data: 2920 bytes
5664    4.505421    2.2.2.2 1.1.1.1 TCP 60  61455 > 59855 [ACK] Seq=1 Ack=2921 Win=11776 Len=0
5665    4.505429    1.1.1.1 2.2.2.2 FTP-DATA    2974    FTP Data: 2920 bytes
5666    4.505535    2.2.2.2 1.1.1.1 TCP 60  61455 > 59855 [ACK] Seq=1 Ack=4381 Win=14720 Len=0
5667    4.505543    1.1.1.1 2.2.2.2 FTP-DATA    2974    FTP Data: 2920 bytes
5734    4.583769    2.2.2.2 1.1.1.1 TCP 60  61455 > 59855 [ACK] Seq=1 Ack=5841 Win=17536 Len=0
5735    4.583778    1.1.1.1 2.2.2.2 FTP-DATA    2974    FTP Data: 2920 bytes
5736    4.583781    2.2.2.2 1.1.1.1 TCP 60  61455 > 59855 [ACK] Seq=1 Ack=7301 Win=20480 Len=0
5737    4.583787    1.1.1.1 2.2.2.2 FTP-DATA    2974    FTP Data: 2920 bytes
incógnito2
fuente
¿Ves que la ventana se reduce a cero durante las transferencias? ¿Está viendo retrasos en los paquetes mientras un lado está esperando la disponibilidad de la ventana? Sería útil si pudieras publicar los pcaps (con marcas de tiempo) que creas que confirman esto para que puedan ser analizados por la comunidad.
polinomio
la ventana no se contrae, no creo que haya retrasos en los paquetes, solo un tamaño de ventana que no aumentará.
incógnito2

Respuestas:

4

Comenzando con el kernel de Linux 2.6.17 (o que hay), se aumentó el factor de escala predeterminado. La desventaja de esto es que parece haber enrutadores / cortafuegos / etc. que no tratan correctamente con el escalado de ventanas TCP (el rfc tiene solo ~ 16 años). Si tiene que atravesar uno de estos dispositivos, debe desactivar la escala de la ventana o las cosas se volverán muy lentas.

En un sistema similar a Redhat / Redhat, la "solución" es:

  /bin/cat <<'EOT'>>/etc/sysctl.conf

  # Turn off the tcp_window_scaling
  net.ipv4.tcp_window_scaling = 0
  EOT

  /sbin/sysctl -p
gsiems
fuente
Comprobé wirehark y el servidor está anunciando una ventana de 14720, así que no creo que sea por un enrutador. Parece que tengo este problema con TODAS las conexiones tcp.
incógnito2
0

hmmm ¿Podrías darnos más información? Como ...

TCP lanza {Reno, Vegas, etc.} Dirección de transferencia {escritorio -> servidor, servidor-> escritorio, algo más} ¿qué está utilizando para la medición? iperf? arpón?

Nikolaidis Fotis
fuente