TCP Initial Window 10 MFC

Lawrence Stewart lstewart at freebsd.org
Thu Aug 15 03:46:20 UTC 2013


On 08/15/13 02:44, Andre Oppermann wrote:
> On 14.08.2013 04:36, Lawrence Stewart wrote:
>> Hi Andre,
>>
>> [RE team is BCCed so they're aware of this discussion]
>>
>> On 07/06/13 00:58, Andre Oppermann wrote:
>>> Author: andre
>>> Date: Fri Jul  5 14:58:24 2013
>>> New Revision: 252789
>>> URL: http://svnweb.freebsd.org/changeset/base/252789
>>>
>>> Log:
>>>    MFC r242266:
>>>
>>>     Increase the initial CWND to 10 segments as defined in IETF TCPM
>>>     draft-ietf-tcpm-initcwnd-05. It explains why the increased initial
>>>     window improves the overall performance of many web services without
>>>     risking congestion collapse.
>>>
>>>     As long as it remains a draft it is placed under a sysctl marking it
>>>     as experimental:
>>>      net.inet.tcp.experimental.initcwnd10 = 1
>>>     When it becomes an official RFC soon the sysctl will be changed to
>>>     the RFC number and moved to net.inet.tcp.
>>>
>>>     This implementation differs from the RFC draft in that it is a bit
>>>     more conservative in the case of packet loss on SYN or SYN|ACK
>>> because
>>>     we haven't reduced the default RTO to 1 second yet.  Also the
>>> restart
>>>     window isn't yet increased as allowed.  Both will be adjusted with
>>>     upcoming changes.
>>>
>>>     Is is enabled by default.  In Linux it is enabled since kernel 3.0.
>>
>> I haven't been fully alert to FreeBSD happenings this year so apologies
>> for bringing this up so long after the MFC.
>>
>> I don't think this change should have been MFCed, at least not in its
>> current form. Enabling the switch to IW=10 on a stable branch is
>> inappropriate IMO. I also think the "net.inet.tcp.experimental" sysctl
>> branch is poorly named as per the important discussion we had back in
>> February [1]. I would really prefer we didn't get stuck having to keep
>> it around by making a stable release with it being present.
>>
>> I think this commit should be backed out of stable/9 and more
>> importantly, 9.2-RELEASE.
> 
> Backing out the patch isn't really necessary, just flip the switch to
> off having it revert to the RFC5681 defaults.  Those who want it anyway
> can simply enable it again.

That doesn't address the sysctl tree naming concern or mechanism issue -
please refer back to the Feb discussion; specifically the proposal to
rename the experimental branch to "net.inet.tcp.nonstandard" and add an
"allowed" leaf which takes a list of non-standard behaviours to allow
tweaking in the stack.

Leaving the sysctl branch named "experimental" conveys that the things
which live under the branch are being evaluated in some way for becoming
a default, which is very different to "nonstandard" which conveys that
the user is twiddling things in a way which normally shouldn't be. IW=10
may become a FreeBSD default at some point, but the mechanism for
enabling it should be to specify the initial window as a value in
segments, and as such by allowing any non-standard value (IW=7, IW=50),
I strongly argue in favour for changing the branch name from
"experimental" to "nonstandard".

In order to continue this discussion in the context of what we started
in Feb, I still request that this change be backed out of releng/9.2 so
that 9.2-RELEASE doesn't ship with it. We can continue discussion for
it's future in stable/9 and head after the backout so that 9.2 isn't
held up.

> IW10 has become RFC6928 (experimental) in April 2013.

Great for the draft authors, but irrelevant for this discussion.

>> As an aside, I am intending to follow up to the Feb discussion with a
>> patch that implements the basic infrastructure I proposed so that we can
>> continue that discussion.
> 
> Again I'm deeply concerned and opposed to giving end users direct control
> over the IW value.  I've had and seen too many cases of totally bogus
> "tuning"
> by cranking up random sysctls to insane values and then complaining about
> FreeBSD being slow compared to Linux (and then ditching FreeBSD).

Sorry, but referring to unspecified cases of stupidity resulting in loss
of unquantified numbers of users as a reason against providing a
controlled mechanism to change a default system parameter in a
potentially harmful way is not a rational argument.

Cheers,
Lawrence


More information about the freebsd-net mailing list