Depuración de velocidad de transferencia lenta desde el servidor

9

Estoy tratando de explicar esto de la manera más simple pero documentada posible. Esto no es exclusivo de este servidor o mi ISP actual . He visto el mismo problema exacto a lo largo de los años al estar con diferentes ISP y tener mis servidores con diferentes proveedores (GoDaddy en EE. UU., IWeb y GloboTech en Canadá). Lo único que ha sido común es el sistema operativo Windows Server (2003 y 2008 r2). Pero veamos por ahora mi servidor actual y mi ISP actual solamente.

El problema :

Obtengo tasas de transferencia muy lentas entre mi estación de trabajo local y mi servidor dedicado remoto. Mi servidor está en un puerto de 100 Mbps y mi estación de trabajo local está en una conexión simétrica de 50 Mbps a través de fibra óptica.

Los síntomas :

Tanto el servidor como la estación de trabajo obtienen excelentes resultados (muy cercanos a sus velocidades de conexión) al realizar pruebas en speedtest.net con diferentes servidores y ubicaciones en los EE. UU. Y México. Si descargo archivos grandes desde, digamos, Dropbox, a mi servidor o mi estación de trabajo, obtengo velocidades de transferencia de 10 MBps y 5 MBps respectivamente en una sola conexión, lo cual es correcto de acuerdo con cada velocidad de conexión de 100 Mbps y 50 Mbps respectivamente.

Sin embargo, si transfiero un archivo desde mi servidor (a través de HTTP o FTP) a mi estación de trabajo, ni siquiera me acerco a la velocidad de 50 Mbps que debería obtener (velocidad de transferencia de 5 MBps), pero obtengo algo equivalente a 3 Mbps (Tasa de transferencia de 300 KBps).

Estoy tratando de entender por qué obtengo una tasa de transferencia tan lenta. No estoy seguro de cómo depurarlo. Cada vez que planteo un ticket sobre el problema con los proveedores de hosting, me piden resultados de tracert y finalmente lo culpan de algún servidor en el medio. Pero eso no parece ser correcto, si tomamos en consideración lo que dije al principio: he visto esta velocidad / problema exacto al tener mis servidores con GoDaddy, iWeb y GloboTech, y mientras soy yo mismo con diferentes ISP en muy diferentes tipos de servicio de internet . Realmente parece una configuración fija en algún lugar del área del servidor.

Pruebas que he hecho :

PRUEBA DE VELOCIDAD

Estas son pruebas de velocidad de speedtest.net que se ejecutaron en mi servidor dedicado contra diferentes servidores remotos, incluido un servidor en el centro de datos de mi ISP en la Ciudad de México:

Canadá : 94,64 Mbps para descargar y 94,87 para cargar http://www.speedtest.net/my-result/3470801975

San José, CA : 93.58 Mbps para descargar y 95.48 Mbps para cargar http://www.speedtest.net/my-result/3470805341

Ciudad de México (servidor en el centro de datos de mi propio ISP) : 92.99 Mbps para descargar y 95.39 Mbps para cargar http://www.speedtest.net/my-result/3470810269

Si ejecuto esas pruebas en los mismos servidores desde mi estación de trabajo local, también obtengo velocidades cercanas a mi conexión de 50 Mbps.

TRACERT

Esta es una salida de tracert reciente ejecutada desde mi estación de trabajo a mi servidor dedicado:

 1    <1 ms    <1 ms    <1 ms  192.168.7.254
 2     2 ms     1 ms     1 ms  10.69.32.1
 3     *        3 ms     2 ms  10.5.50.174
 4     3 ms     2 ms     2 ms  10.5.50.173
 5     *        5 ms     3 ms  fixed-203-69-2.iusacell.net [189.203.69.2]
 6    32 ms    32 ms    32 ms  8-1-33.ear1.Dallas1.Level3.net [4.71.220.89]
 7    33 ms    33 ms    33 ms  ae-3-80.edge5.Dallas3.Level3.net [4.69.145.145]
 8    33 ms    33 ms    33 ms  ae13.dal33.ip4.tinet.net [77.67.71.221]
 9    76 ms    76 ms   157 ms  xe-1-0-0.mtl10.ip4.tinet.net [89.149.185.41]
10    72 ms    72 ms    72 ms  te2-2.cr2.mtl3.gtcomm.net [67.215.0.160]
11    72 ms    72 ms    72 ms  ae2.csr2.mtl3.gtcomm.net [67.215.0.134]
12    72 ms    72 ms    73 ms  te3-4.dist1.mtl8.gtcomm.net [67.215.0.83]
13    72 ms    72 ms    72 ms  ns1.marveldns.com [173.209.57.82]

IPERF

Esta es una prueba iperf ejecutada usando mi servidor dedicado como servidor y mi estación de trabajo como cliente:

------------------------------------------------------------
Client connecting to ns1.marveldns.com, TCP port 5001
TCP window size: 64.0 KByte (default)
------------------------------------------------------------
[  3] local 192.168.7.2 port 60339 connected with 173.209.57.82 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.3 sec  5.62 MBytes  4.59 Mbits/sec

RUTA

Este es el resultado de una recomendación de ruta ejecutada desde mi estación de trabajo a mi servidor dedicado:

Tracing route to ns1.marveldns.com [173.209.57.82]
over a maximum of 30 hops:
  0  ws1 [192.168.7.2]
  1  192.168.7.254
  2  10.69.32.1
  3     *     10.5.50.174
  4  10.5.50.173
  5  fixed-203-69-2.iusacell.net [189.203.69.2]
  6  8-1-33.ear1.Dallas1.Level3.net [4.71.220.89]
  7  ae-3-80.edge5.Dallas3.Level3.net [4.69.145.145]
  8  ae13.dal33.ip4.tinet.net [77.67.71.221]
  9  xe-1-0-0.mtl10.ip4.tinet.net [89.149.185.41]
 10  te2-2.cr2.mtl3.gtcomm.net [67.215.0.160]
 11  ae2.csr2.mtl3.gtcomm.net [67.215.0.134]
 12  te3-4.dist1.mtl8.gtcomm.net [67.215.0.83]
 13  ns1.marveldns.com [173.209.57.82]

Computing statistics for 325 seconds...
            Source to Here   This Node/Link
Hop    RTT  Lost/Sent = Pct  Lost/Sent = Pct  Address
  0                                           ws1 [192.168.7.2]
                                0/ 100 =  0%   |
  1    0ms     0/ 100 =  0%     0/ 100 =  0%  192.168.7.254
                                0/ 100 =  0%   |
  2    1ms     0/ 100 =  0%     0/ 100 =  0%  10.69.32.1
                                0/ 100 =  0%   |
  3    3ms     0/ 100 =  0%     0/ 100 =  0%  10.5.50.174
                                0/ 100 =  0%   |
  4    2ms     0/ 100 =  0%     0/ 100 =  0%  10.5.50.173
                                0/ 100 =  0%   |
  5    4ms    20/ 100 = 20%    20/ 100 = 20%  fixed-203-69-2.iusacell.net [189.203.69.2]
                                0/ 100 =  0%   |
  6   34ms     0/ 100 =  0%     0/ 100 =  0%  8-1-33.ear1.Dallas1.Level3.net [4.71.220.89]
                                0/ 100 =  0%   |
  7   34ms     0/ 100 =  0%     0/ 100 =  0%  ae-3-80.edge5.Dallas3.Level3.net [4.69.145.145]
                                0/ 100 =  0%   |
  8   33ms     0/ 100 =  0%     0/ 100 =  0%  ae13.dal33.ip4.tinet.net [77.67.71.221]
                                0/ 100 =  0%   |
  9   79ms     0/ 100 =  0%     0/ 100 =  0%  xe-1-0-0.mtl10.ip4.tinet.net [89.149.185.41]
                                2/ 100 =  2%   |
 10   73ms    14/ 100 = 14%    12/ 100 = 12%  te2-2.cr2.mtl3.gtcomm.net [67.215.0.160]
                                0/ 100 =  0%   |
 11   72ms     2/ 100 =  2%     0/ 100 =  0%  ae2.csr2.mtl3.gtcomm.net [67.215.0.134]
                                2/ 100 =  2%   |
 12   72ms    18/ 100 = 18%    14/ 100 = 14%  te3-4.dist1.mtl8.gtcomm.net [67.215.0.83]
                                0/ 100 =  0%   |
 13   72ms     4/ 100 =  4%     0/ 100 =  0%  ns1.marveldns.com [173.209.57.82]

Trace complete.

Cosas que puedes probar por ti mismo

Si quieres probarlo, estas son algunas de las cosas que configuré en el servidor para realizar pruebas:

Archivo grande en el servidor HTTP

He colocado un archivo de 5 GB en mi servidor que se puede descargar a través de HTTP. Puede encontrarlo aquí: http://www.marveldns.com/transfer_test/

Aplicación Speedtest MINI

He configurado una prueba "mini speedtest" en mi servidor. Puede visitarlo y ver qué velocidad dice que está obteniendo tanto para descargar como para cargar dentro de mi servidor y usted mismo. Puede encontrarlo aquí: http://www.marveldns.com/speedtest/

Por último :

Como dije antes, estoy tratando de obtener ayuda para entender todo. No soy experto en TCP / IP o en redes de gama alta. Sinceramente, ni siquiera tengo claro cómo usar los resultados de tracert, iperf o pingpath para poder resolver el problema, pero los incluyo porque siempre me lo piden cuando hablo de este problema.

Si mi pregunta carece de algo para mejorar, por favor, no lo rechace y dígame qué tiene de malo o qué más puedo agregar para obtener ayuda. Gracias.

Francisco Zarabozo
fuente
solo porque tengo curiosidad, ¿qué velocidad tienes cuando depositas tu archivo en localhost en tu servidor dedicado?
Brice
Hola brice Obtengo algo alrededor de 50 MB / s (bytes, no bits), que es más o menos la misma velocidad que obtengo si copio manualmente el archivo a la misma carpeta en el mismo disco directamente en el Explorador de Windows (por lo que está limitado por la velocidad de el disco mientras lee y escribe en sí mismo).
Francisco Zarabozo
1
Según tracert, su estación de trabajo está en una red bastante grande. ¿Has intentado preguntar al administrador de la red local si había algún tipo de Qos que ralentizaría las conexiones?
Si inicia múltiples transferencias simultáneamente, ¿la velocidad combinada se suma a cerca de los 50Mbit / s esperados? es decir. ¿Es lento sobre todo o lento por conexión?
Grant
@Grant: con múltiples conexiones, anuncia hasta 50 Mbps. El límite se produce por conexión.
Francisco Zarabozo

Respuestas:

9

El cuello de botella que veo al acceder a esa URL se debe claramente al tamaño de la ventana.

Cuando intento descargar de su servidor obtengo 555 KB / s. Tengo un tiempo de ida y vuelta de 108 ms. Haciendo los cálculos obtengo el siguiente tamaño de ventana: 555KB / s * 108ms = 59.94KB.

Mientras lo haga desde un host en un centro de datos, obtengo un rendimiento y un viaje de ida y vuelta muy consistentes. Además, si comienzo dos descargas en paralelo, cada una obtiene 555 KB / s. Esos son exactamente los síntomas que verá cuando el cuello de botella sea el tamaño de la ventana.

Sin escala de ventana, la ventana no puede ser mayor de 64 KB. Pero veo que se debe negociar el escalado de la ventana, por lo que debería ser posible un mayor rendimiento. Esto deja dos hipótesis para investigar:

  • Algo está alterando la opción de escala de ventana en la ruta del cliente al servidor, lo que hace que el servidor piense que la ventana se escala en un factor de 1.
  • El servidor se puede configurar para que nunca use más de 60 KB de ventana de envío en cada conexión.

El primero es fácil de verificar si puede realizar una captura de paquetes en el servidor. Basta con mirar la opción de escala en los paquetes SYN entrantes para averiguar si el servidor recibe un factor de escala superior a uno. Puedo recomendar usar Wireshark para analizar el tráfico.

La verificación de la segunda hipótesis requiere cierto conocimiento del sistema operativo que está utilizando. Por casualidad has elegido un sistema operativo, que yo desconozco, por lo que no puedo ayudarte. Así que solo puedo ayudar con experiencia en redes.

kasperd
fuente
No estoy 100% seguro, pero ¿no se ve afectado el tamaño de la ventana por el tamaño del buffer de envío y recepción del socket (opciones de socket SO_RVSBUF y SO_SNDBUF)? He visto incidentes similares en los que el búfer era demasiado pequeño (por ejemplo, 1 KB) y el rendimiento era muy limitado en comparación con 4KB u 8KB).
Cameron Kerr
@CameronKerr Su comentario me impulsó a echar otro vistazo a la comunicación. Esta vez probé desde mi computadora portátil (que está en WiFi y tiene un rendimiento más bajo). Lo que observé fue que obtengo 138 KB / s con un viaje de ida y vuelta de 105 ms. Eso significa un tamaño efectivo de ventana de 14.5KB. La ventana de recepción anunciada por mi computadora portátil creció a 679 << 7 (alrededor de 85 KB) antes de que el rendimiento se estabilizara. Eso debería descartar la posibilidad de que el factor de escala simplemente se pusiera a cero en tránsito y debería descartar la posibilidad de que el rendimiento estuviera limitado por el búfer de recepción de mi parte.
kasperd
Puede encontrar un artículo relevante para Windows Server 2008 r2 aquí: andydavies.me/blog/2011/11/21/…
Francisco Zarabozo