¿Por qué FileZilla es mucho más rápido que PSFTP?

11

Estoy usando FileZilla 3.10.3 y PSFTP 0.63 (PuTTY). ¿Alguien puede ayudarme a entender por qué el rendimiento que obtengo es tan drásticamente diferente entre los dos clientes? ¡No puede ser solo una deficiencia del protocolo SFTP, porque FileZilla (y WinSCP) es mucho más rápido! Gracias por adelantado.

Cuando uso FileZilla para conectarse al mismo servidor usando algún protocolo, obtengo un "buen" rendimiento; ~ 1.2MBPS para un archivo grande. Aquí está el registro:

Response: fzSftp started, protocol_version=2
Command: open "[email protected]" 22
Trace: Looking up host "ftp.themcorp.com"
Trace: Connecting to 222.22.111.33 port 22
Trace: We claim version: SSH-2.0-PuTTY_Local:_Mar_29_2015_12:25:15
Trace: Server version: SSH-2.0-9.99 sshlib: 8.1.0.0
Trace: Using SSH protocol version 2
Trace: Doing Diffie-Hellman group exchange
Trace: Doing Diffie-Hellman key exchange with hash SHA-1
Trace: Host key fingerprint is:
Trace: ssh-dss 1024 20:88:a6:92:fe:11:db:b4:9a:b5:9e:8b:5f:50:bb:77
Trace: Initialised AES-256 SDCTR client->server encryption
Trace: Initialised HMAC-SHA1 client->server MAC algorithm
Trace: Initialised AES-256 SDCTR server->client encryption
Trace: Initialised HMAC-SHA1 server->client MAC algorithm
Command: Pass: ********
Trace: Sent password
Trace: Access granted
Trace: Opening session as main channel
Trace: Opened main channel
Trace: Started a shell/command
Status: Connected to ftp.themcorp.com
Trace: CControlSocket::ResetOperation(0)
Status: Starting upload of c:\temp\test.zip
Command: cd "/Home/mecorp"
Response: New directory is: "/Home/mecorp"
Trace: CControlSocket::ResetOperation(0)
Trace: FileTransferSend()
Command: put "c:\temp\test.zip" "test.zip"
Status: local:c:\temp\test.zip => remote:/Home/mecorp/test.zip
Trace: FileTransferParseResponse()
Trace: CControlSocket::ResetOperation(0)
Status: File transfer successful, transferred 27,974,088 bytes in 21 seconds

Cuando uso PSFTP para conectarme al mismo servidor usando el mismo protocolo y transfiriendo el mismo archivo, obtengo un rendimiento mucho más lento. Yo estimaría unos 150 kbps (mirando los bytes de E / S en el administrador de tareas de Windows 7). Aquí está el registro:

C:\temp>c:\d2\trunk\Util\psftp.exe -v -l mecorp -pw topsecret -P 22 ftp.themcorp.com
Looking up host "ftp.themcorp.com"
Connecting to 222.22.111.33 port 22
Server version: SSH-2.0-9.99 sshlib: 8.1.0.0
Using SSH protocol version 2
We claim version: SSH-2.0-PuTTY_Release_0.63
Doing Diffie-Hellman group exchange
Doing Diffie-Hellman key exchange with hash SHA-1
Host key fingerprint is:
ssh-dss 1024 20:88:a6:92:fe:11:db:b4:9a:b5:9e:8b:5f:50:bb:77
Initialised AES-256 SDCTR client->server encryption
Initialised HMAC-SHA1 client->server MAC algorithm
Initialised AES-256 SDCTR server->client encryption
Initialised HMAC-SHA1 server->client MAC algorithm
Using username "mecorp".
Sent password
Access granted
Opening session as main channel
Opened main channel
Started a shell/command
Connected to ftp.themcorp.com
Remote working directory is /Home/mecorp
psftp> put test.zip test.zip
local:test.zip => remote:/Home/mecorp/test.zip
psftp>
Chris
fuente

Respuestas:

23

FileZilla utiliza un código fuente PuTTY / psftp para una implementación SFTP. En realidad, FileZilla ejecuta un subproceso PSFTP oculto.

Pero utiliza su propia compilación de PSFTP ( FzSFtp.exe) que emplea pocas optimizaciones (y otras modificaciones), que incluyen:

  • La cola de transferencia de SFTP es de 4 MB (en comparación con 1 MB en PSFTP)
  • Asigna memoria en fragmentos mucho más grandes (32 KB en comparación con 515 B)
  • Utiliza grandes buffers de red (4 MB para SO_RCVBUF y tamaño dinámico para SO_SNDBUF [usando SIO_IDEAL_SEND_BACKLOG_QUERY]). PSFTP mantiene los valores predeterminados del sistema.

FileZilla también utiliza un compilador diferente (mingw) que PuTTY (VS), lo que puede contribuir.


WinSCP también se basa en el código PSFTP (aunque utiliza el código PSFTP internamente, no en un subproceso externo) y utiliza un conjunto similar de optimizaciones.

Martin Prikryl
fuente
44
Muy informativo, Martin, y gracias por WinSCP!
Chris