> 
>> So will it not care for any ACKs? If you send a 10GB file and the first 
>> packet
>> is never acked? Maybe a limit for amount of outstanding un-acked data?
> 
> No, not like that; available acks are processed after every successful
> send. We just don't wait for acks that are not available yet, at least
> in nonblocking mode. I don't know how the code would behave in
> blocking mode, I should probably check that.


I’ve written custom pipelining code for upload/download using some of the 
libssh2 primitive functions. I also recommend having a max outstanding packet 
number, I’ve saturated lesser servers by flooding them with concurrent writes. 
Currently our value is 64 outstanding writes which, I think, mirrors OpenSSH.

The approach I took is slowly increasing the concurrent requests. I send an 
initial request and wait to see if it fails due of a write error or other 
transient error and then start sending concurrent requests if the first 
synchronous write was successful.

I then ramp the requests slowly by first sending 2 writes, drain the ready 
replies, then increase the outstanding requests by one and drain and so on 
until I reach the max of 64 outstanding requests. This gradual increase allows 
small files to upload without immediately doing a bunch of concurrent writes to 
the server, seems to work well in practice.

Hope this helps,
Will


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

Reply via email to