Pregunta Copiar sobre SSH a través de Putty tools es más lento que a través de WinSCP


La carga desde mi PC con Windows (1) a mi máquina Ubuntu (2) en otra ciudad usando herramientas PuTTY es lenta.

Probé esto en el túnel OpenVPN y mediante el reenvío de puertos a (2). Resulta que usar rsync (Unison) a través de SSH (plink.exe) o pscp.exe es un 70% más lento que copiar con WinSCP (SCP o SFTP) en la dirección (1) -> (2). La descarga tiene las mismas velocidades para ambos.

Aquí hay algunos datos:

link    protocol    software  source  target  max speed (kb/s)
theoretical speed 4.5mbits      1       2       560
theoretical speed 6.0mbits      2       1       750
VPN     SFTP        pscp.exe    1       2       180 <- not ok
VPN     SFTP        pscp.exe    2       1       640
VPN     SFTP        winscp      1       2       570 <- ok
VPN     SFTP        winscp      2       1       670
PF      SFTP        pscp.exe    1       2       185 <- not ok
PF      SFTP        pscp.exe    2       1       700
PF      SFTP        winscp      1       2       600 <- ok
PF      SFTP        winscp      2       1       680

Unison tiene casi exactamente las mismas velocidades que pscp.

Inspeccioné mis paquetes a través de Wireshark, pero no parece nada especial. Solo que WinSCP envía más del doble de la cantidad de paquetes al mismo tiempo.

Estilo de envío:
WinSCP: 2 o 3 SSH1 al servidor, 1 atrás (ACK)

No.     Time           Source                Destination           Protocol Length Info
797 1.003187000    10.8.0.6              10.8.0.10             TCP      54     22?51739 [ACK] Seq=5089 Ack=496673 Win=7079 Len=0
798 1.003208000    10.8.0.10             10.8.0.6              SSH      1241   Client: Encrypted packet (len=1187)
799 1.003211000    10.8.0.10             10.8.0.6              SSH      1241   Client: Encrypted packet (len=1187)
800 1.008147000    10.8.0.6              10.8.0.10             TCP      54     22?51739 [ACK] Seq=5089 Ack=499047 Win=7079 Len=0
801 1.008166000    10.8.0.10             10.8.0.6              SSH      1241   Client: Encrypted packet (len=1187)
802 1.008180000    10.8.0.10             10.8.0.6              SSH      1241   Client: Encrypted packet (len=1187)
803 1.008357000    10.8.0.6              10.8.0.10             TCP      54     22?51739 [ACK] Seq=5089 Ack=501421 Win=7079 Len=0

pscp: 4 SSH2 al servidor, 2 atrás (ACK) y un SSH2 atrás

No.     Time           Source                Destination           Protocol Length Info
210 11.000452000   10.8.0.6              10.8.0.10             TCP      54     22?51744 [ACK] Seq=6178 Ack=97187 Win=185856 Len=0
211 11.005520000   10.8.0.6              10.8.0.10             TCP      54     22?51744 [ACK] Seq=6178 Ack=98989 Win=185856 Len=0
212 11.005585000   10.8.0.10             10.8.0.6              SSHv2    1241   Client: Encrypted packet (len=1187)
213 11.005589000   10.8.0.10             10.8.0.6              SSHv2    1241   Client: Encrypted packet (len=1187)
214 11.005591000   10.8.0.10             10.8.0.6              SSHv2    1241   Client: Encrypted packet (len=1187)
215 11.005592000   10.8.0.10             10.8.0.6              SSHv2    669    Client: Encrypted packet (len=615)
216 11.006578000   10.8.0.6              10.8.0.10             SSHv2    134    Server: Encrypted packet (len=80)
217 11.032385000   10.8.0.6              10.8.0.10             TCP      54     22?51744 [ACK] Seq=6258 Ack=101363 Win=185856 Len=0
218 11.037768000   10.8.0.6              10.8.0.10             TCP      54     22?51744 [ACK] Seq=6258 Ack=103165 Win=185856 Len=0

La máquina de Ubuntu no proporciona SSH1, WinSCP también ha elegido SSH2 en su configuración.

Otra diferencia son los valores WIN y ACK.

  1. ¿ACK y WIN tienen alguna influencia en las velocidades de transferencia?
  2. ¿Qué podría estar causando este problema?

Edición: Probé con Cygwin y OpenSSH: las mismas velocidades que WinSCP. Hice dos imágenes comparando la información de WinSCP y Putty TCP, estas son las diferencias:

                   Putty  WinSCP
TCP Segment Len:   615    1187
TCP Push:          Set    Not set
Window size value  4014   4118
calc. Window size  16056  16472
[Bytes in flight:] 8352   91399
  1. ¿Podría TCP la bandera de inserción ser la razón?

Actualización - 20 de abril.

link    protocol    software  source  target  max speed (kb/s)
cVPN    SFTP        pscp.exe    3       4       250 <- not ok
cVPN    SFTP        winscp      3       4       580 <- ok
cLAN    SFTP        pscp.exe    3       4       10200 <- maybe not ok
cLAN    SFTP        winscp      3       4       11500 <- as expected

cVPN = commercialVPN en mi casa LAN, cLAN = mi Office Lan, (3) -> (4) = copia desde la computadora portátil de la oficina al servidor del centro de datos. Aquí pscp también tiene una velocidad más baja que winscp!

El orden del paquete para pscp es demasiado simple. Después de inspeccionar los paquetes, el estilo es más como

...
8  client data (100% fill)
9  client data (100%)
10 client data (60%)
11 server data?
12 server ACK to packet #1
13 server ACK to packet #3
14 client ACK to packet #11
...

Esto es muy constante. En su lugar, WinSCP realiza ACK para paquetes mucho más antiguos, generando así más paquetes en vuelo y mayor rendimiento, ya que parece que no espera un ACK hasta que se envían los siguientes paquetes.

Parece que esto es causado de alguna manera por Putty esperando el ACK en lugar de simplemente enviar algunos paquetes más (lo que hace winscp).

Otras pruebas:

ctcp (de)activated - no change
rtt to ack winscp = 100ms
irtt winscp no info
rtt to ack pscp   = 50ms
irtt pscp = 40ms
winscp: window scaling status: unknown (-1)
pscp:   window scaling status: disabled(-2)

Me encantaría probar más, pero no sé qué probar, probar y monitorear.


7
2018-04-16 20:51


origen


Intenté construir PuTTy yo mismo, pero no tuve suerte. En su ssh.c hay una definición (OUR_V2_WINSIZE) que tiene un valor de 16384. Tal vez esté limitando algún tipo de búfer. marci.blogs.balabit.com/2009/11/putty-performance describe este problema en (2). Hasta que esto se solucione, usaré OpenSSH de Cygwin para lo que quiero hacer. Me da ~ 600KB / s con los que estoy contento. Tal vez alguien más tenga más suerte compilando PuTTy. - BadTenMan
Esta pregunta sigue siendo relevante. Llego a resultados similares al hacer benchmarking plink (alrededor de 1 MiB / s) y winscp (alrededor de 6-9 MiB / s). Puede reemplazar plink con el puerto oficial de OpenSSH para Windows, ver Win32-OpenSSH. Da un rendimiento similar al de winscp (sólido 8 MiB / s). - Vlastimil Ovčáčík
Hay un problema con github Velocidad de descarga lenta de la red a través de plink Relevante a esta pregunta, con más puntos de referencia. - Vlastimil Ovčáčík


Respuestas:


WinSCP usa el código PuTTY internamente. Por lo tanto, no debe haber ninguna diferencia en un algoritmo de cifrado seleccionado.

Aunque WinSCP emplea algunas optimizaciones sobre el código PuTTY, particularmente los buffers internos y de red más grandes. Eso ayuda en ciertos casos a lograr un mejor rendimiento.

Algunas referencias:
https://winscp.net/tracker/615
https://winscp.net/tracker/690
https://winscp.net/tracker/1273
https://winscp.net/tracker/1295 


Respecto a la bandera "TCP Push":

Esto es probable porque WinSCP deshabilita Algoritmo de Nagle en el zócalo, mientras que las herramientas de transferencia PuTTY no lo hacen (PuTTY sí lo hace).

Espero que en cualquier red razonable, esto no haga ninguna diferencia, ya que ambas aplicaciones envían datos al socket lo más rápido posible, por lo que la capa de red no debería tener ninguna razón para retrasar los paquetes. Y definitivamente no veo ninguna diferencia en ninguna red en esta prueba. Pero tengo informes de algunos usuarios que hacen una diferencia.

Si bien puede alternar el algoritmo de Nagle en la configuración del terminal PuTTY, no puede alternarlo en las herramientas de transferencia PuTTY (psftp y pscp), siempre está habilitado.
https://the.earth.li/~sgtatham/putty/latest/htmldoc/Chapter4.html#config-nodelay


7
2018-04-17 06:26



Gracias por esta respuesta! Intenté resolverlo como en el error 690 con entradas de registro para AFD y tcpip, pero eso no ayuda. Actualicé la pregunta con las propiedades del paquete tcp de los paquetes (2) -> (1). El lunes probaré esto con uno de nuestros servidores de centros de datos, pero no creo que esté permitido grabar los paquetes como lo hice aquí. - BadTenMan
He añadido detalles en la bandera "TCP push" - Martin Prikryl


Los mejores consejos dados en FAQ - VELOCIDAD WINSCP, MÁS - actualice el WINSCP a la última versión.

citar:

Cuando se usa SSH, las transferencias de archivos en WinSCP están cifradas y su CPU   intensivo. Blowfish suele ser mucho más rápido que AES (entonces, intente   BLOWFISH). También puede ayudar si desactiva la compresión, si tiene   lo encendió antes

En caso de que la latencia de conexión acelere la velocidad, puede ser útil si   utiliza el protocolo SCP en lugar de SFTP. SCP se ve menos afectado por la latencia.   En este caso, puede ayudar si activa la compresión.


0
2017-07-22 13:21



Como comenté otra respuesta: WinSCP está bien para mí. El pscp de Putty es el problema. - BadTenMan


Pscp no tiene un interruptor -c para seleccionar un cifrado como scp en * nix. Para evitar esto, puede guardar su host de destino como una sesión de masilla, lo que le permite cambiar el orden de selección de cifrado. Blowfish tiende a dar un mejor rendimiento que el AES por defecto.


-1
2018-04-16 23:15



Si bien esto puede mejorar el rendimiento de PuTTY, no responde la pregunta, por qué PuTTY es más lento que WinSCP. - Martin Prikryl
En realidad no mejorará el rendimiento de PuTTY en este caso particular. Lo haría, si el rendimiento fuera de la CPU. Pero en este caso está enlazado a la red. En casos vinculados a la CPU, WinSCP no supera a PuTTY. - Martin Prikryl


WinSCP en sí (a menos que se hayan corregido en la última versión?) Es terriblemente lento en comparación con otros, recomendaría Filezilla sobre WinSCP, MUCHO más rápido para las transferencias de archivos ssh en comparación con winscp.


-2
2018-04-18 10:51



WinSCP tiene una velocidad perfecta para mí y satura el ancho de banda casi por completo. SSH con Putty es lento en este caso. - BadTenMan
Estaba usando WinSCP 4.36 en Windows 7 y fue categóricamente lento en comparación con Filezilla, hay muchas discusiones en la web e incluso Bugs archivados sobre la lentitud, aquí hay uno de ellos. winscp.net/tracker/show_bug.cgi?id=164 y aquí hay una discusión winscp.net/forum/viewtopic.php?t=5096 - htfree