> Hi,
>
> On Thu, Sep 09, 2010 at 06:32:14PM -0500, open...@rkmorris.us wrote:
>   
>> I can't explain the information below, but hopefully someone a whole 
>> bunch smarter than me understands it - as it seems to help with 
>> TCP throughput in OpenVPN (the holy grail??? ... :-)).
>>     
>
> Did you change TCP window size on the client, or on the OpenVPN process?
>
> If changing the TCP window size on the client helps, this is somewhat
> unsurprising - OpenVPN adds delay, and TCP with a too-small window size
> breaks down miserably if the delay goes up.
>
> What's the "default" TCP window size here?
>
> Given that you can even see an effect in the "direct" case, I suspect that
> your machines' TCP window sizes are *way* too small - and this has not much
> to do with TCP-over-TCP, but you would see the same effect for UDP-based
> OpenVPN as well.
>
> Simple example, to clarify the effect of round trip time (delay) on
> TCP throughput:
>
> TCP uses a sliding window, that is, the sender can send as many packets
> as the "window size" permits before the sender has to wait for an acknowledge
> from the receiver.  Now, if the link has a noticeable delay AND lots of
> bandwidth, the bandwidth * time product adds up to the minimum window size
> you need to use:
>
>  1000 Mbit/s link
>  1 ms delay (1/1000s)
>
> 1000 Mbit/s * 1ms = 1 Mbit = 100 Kbyte "in flight" - that is, if the sender 
> keeps sending packets back to back, with no pause in between, it needs to
> send out 100 kbyte before the first ACK packet comes back.
>
> If the sender only sends 10 kbyte because the TCP window size doesn't permit
> sending more, these 10 kbyte are sent in ~ 0.1 ms, and then it has to 
> wait for 0.9 ms for the ACKs to come in - send again for 0.1 ms, wait 0.9 ms
> (roughly).  So it's only using 10% of the available sending capacity, and
> the performance sucks.
>
>
> So, in your examples, my guess is that the TCP window size is "barely large
> enough" for the "direct" case (but the link is not fully saturated unless
> you increase the window size) - and since OpenVPN adds some noticeable
> delay, the bandwidth * delay product goes up, and so needs the window size
> to be able to fully saturate the link...
>   
I wonder if the iPerf results only apply to iPerf tests... Linux
autotunes TCP parameters, including send and receive windows[1].
However, increasing the maximum TCP buffer / memory size may be useful
sometimes [2]. Also, an application can choose to use a smaller buffer
than the OS default [2]: apparently iPerf does this. Windows also
autotunes it's TCP parameters[3], although manual editing is an option[4].

Russell: perhaps you could try tuning the OS-level TCP buffer size and
then test the results with a few different real-world applications (e.g.
netcat, scp)?

[1] <http://www.psc.edu/networking/projects/tcptune/#Linux>
[2] <http://www.psc.edu/networking/projects/tcptune/#options>
[3] <http://fasterdata.es.net/TCP-tuning/>
[4]
<http://www.psc.edu/networking/projects/tcptune/OStune/winxp/winxp_stepbystep.html>

-- 
Samuli Seppänen
Community Manager
OpenVPN Technologies, Inc

irc freenode net: mattock


Reply via email to