cygwin performance problem
Chris Rapier
rapier at psc.edu
Wed Apr 19 02:44:05 EST 2006
Could you tell me a bit more about your network setup including the RTT
between the hosts? I'm going to try this under OS X on 100bT and between
two linux hosts at 1Gb. The results will mean more if the differences in
the network environment are accounted for.
Corinna Vinschen wrote:
> On Apr 18 22:47, Damien Miller wrote:
>> On Tue, 4 Apr 2006, Corinna Vinschen wrote:
>>> Not sure if it's ok to discuss this here. However, we have some
>>> performance problems on Cygwin with the vanilla version of OpenSSH. The
>>> main problem is the size of the read buffers in the client loop, resp.
>>> client_process_net_input/client_process_input. The buffer size is a
>>> fixed 8K. For some reason this degrades performance on Windows
>>> enormously
>> Is it necessary to adjust both these buffers? Or does increasing only
>> the network buffer in client_process_net_input() help?
>
> Yes, it's apparently enough to change the buffer in client_process_net_input.
>>> By raising the aforementioned buffers in clientloop.c from 8192 to, say,
>>> 87380 (default tcp recv buffer size), the latter copy is way faster:
>> Have you tried smaller numbers than 87380? It isn't much effort to
>> crank these buffers up if smaller reads have a performance penalty
>> on Windows, but I'd prefer to make changes based on some measurements.
>> Could you try a range of buffer sizes from 8192 up (doubling perhaps)
>> and see if there is a sweet spot of size vs. performance?
>
> I must admit that I have only tried 65536 and bigger sizes. I made some
> tests now with smaller buffer sizes, and the results are interesting.
> There's a performance maximum, which is at buffer sizes between 17408
> and 21504 bytes. Every other buffer size below or above these values
> results in a decrease in performance.
>
> Buffersize Throughput
> Bytes MB/s
>
> 8192 1.3
> 12288 3.5
> 16384 6.6
> 17408 9.1
> 18432 9.1
> 19456 9.1
> 20480 9.1
> 21504 9.1
> 22528 5.9
> 24576 5.9
> 32768 5.9
> 49152 5.9
> 65536 5.6
> 87380 5.6
> 131072 5.6
> 524288 5.6
>
> I don't see a reason for the maximum at this 17K to 21K area, but it's
> definitely not a problem of intermediate buffering in Cygwin. The user
> buffer is directly used in the call to the underlying Windows sockets
> call.
>
> So, well, maybe setting the buffer size to 20480 would be a useful
> compromise for all OSes?!?
>
>
> Corinna
>
More information about the openssh-unix-dev
mailing list