www.libssh2.org | Daily snapshots | Mailing list archive | Docs | Examples | github

Archive Index This month's Index

Subject: Re: SFTP slow read in libssh2 compared to SecureCRT

Re: SFTP slow read in libssh2 compared to SecureCRT

From: Nitin Deokate <ndeokate_at_qualys.com>
Date: Thu, 26 Mar 2015 20:13:26 +0530

Thanks for update Lars.

On Thu, Mar 26, 2015 at 8:03 PM, Lars Nordin <Lars.Nordin@sdlabs.se> wrote:

On 2015-03-26 14:48, Nitin Deokate wrote:
> Hi Lars,
> I had reported same issue around 8-9 months back. Please refer this mail
> thread: http://www.libssh2.org/mail/libssh2-devel-archive-2014-06/0001.shtml
> Is anybody already looking into this issue to fix?
I will try to solve this, I need better speed in SFTP download. I found
a way to get more then the internal datasize, but didn't get improvment
in speed.

I report back when I have an solution!

/Lars
> Thanks
> Nitin
>
> -----Original Message-----
> From: libssh2-devel [mailto:libssh2-devel-bounces@cool.haxx.se] On Behalf Of
> Lars Nordin
> Sent: Thursday, March 26, 2015 4:50 AM
> To: libssh2-devel@cool.haxx.se
> Subject: Re: SFTP slow read in libssh2 compared to SecureCRT
>
> On 2015-03-25 23:53, Daniel Stenberg wrote:
>> On Wed, 25 Mar 2015, Lars Nordin wrote:
>>
>>> and I get 2000 bytes each time. The testfile is 116K.
>> Let me explain in rough terms why you see this 2000 bytes data and how
>> the libssh2 SFTP code works.
>>
>> The SFTP code will take your given buffer size and split it into 2000
>> bytes chunks and ask the server for such data packets, as many as can
>> fit in your buffer.
>>
>> A 20000 buffer thus ends up asking for 10 such packets - at once.
>> libssh2 will then return data back as soon as there is data to return,
>> which initially could be a single 2000 bytes packet but over time
>> should become a whole bunch of such packets assuming the bandwidth is
>> good enough.
> But the code is just returning one packet of data, ie 2000 bytes (as I get
> all the time)
> rc32 = _libssh2_ntohu32(data + 5);
> ...
> if(rc32 > 0) {
>                       /* we must return as we wrote some data to the buffer
> */
>                       return rc32;
>
> the buffer is just one chunk, from your explanation I thought I would find
> something like:
> outlen +=rc32
>
> and a buffer-pointer slider through the receive-buffer in the
> sftp_read() parameter.
>> This concept is used because SFTP requires ACKs for ever packet it
>> asks for so it better ask for a whole bunch at once to suffer less RTT
>> pains.
>>
> My WireShark session tells different, I see a client package, and the 1 to 4
> server packages, the output should be 10 client packages asking for data (or
> maybe only one??)  and then 10 server packages (using your example)
>
> I will try to read the code and add some debug.
>
> My 76M file transfers in 44 minutes using SFTP_read, 81s using SecureCRT
> SFTP_read and 12s using scp...
>
> /Lars
>
>
> _______________________________________________
> libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel
> _______________________________________________
> libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel
Received on 2015-03-26

the libssh2 team