Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 13 Nov 2010 11:35:16 +1100
From:      Lawrence Stewart <lstewart@freebsd.org>
To:        src-committers@FreeBSD.org
Cc:        svn-src-head@FreeBSD.org, svn-src-all@FreeBSD.org, Andre Oppermann <andre@FreeBSD.org>
Subject:   Re: svn commit: r215166 - in head: . sys/conf sys/netinet sys/netinet/cc sys/sys
Message-ID:  <4CDDDD44.9070907@freebsd.org>
In-Reply-To: <201011120641.oAC6fui3098584@svn.freebsd.org>

index | next in thread | previous in thread | raw e-mail

On 11/12/10 17:41, Lawrence Stewart wrote:
> Author: lstewart
> Date: Fri Nov 12 06:41:55 2010
> New Revision: 215166
> URL: http://svn.freebsd.org/changeset/base/215166
> 
> Log:
>   This commit marks the first formal contribution of the "Five New TCP Congestion
>   Control Algorithms for FreeBSD" FreeBSD Foundation funded project. More details
>   about the project are available at: http://caia.swin.edu.au/freebsd/5cc/
>   
>   - Add a KPI and supporting infrastructure to allow modular congestion control
>     algorithms to be used in the net stack. Algorithms can maintain per-connection
>     state if required, and connections maintain their own algorithm pointer, which
>     allows different connections to concurrently use different algorithms. The
>     TCP_CONGESTION socket option can be used with getsockopt()/setsockopt() to
>     programmatically query or change the congestion control algorithm respectively
>     from within an application at runtime.
>   
>   - Integrate the framework with the TCP stack in as least intrusive a manner as
>     possible. Care was also taken to develop the framework in a way that should
>     allow integration with other congestion aware transport protocols (e.g. SCTP)
>     in the future. The hope is that we will one day be able to share a single set
>     of congestion control algorithm modules between all congestion aware transport
>     protocols.
>   
>   - Introduce a new congestion recovery (TF_CONGRECOVERY) state into the TCP stack
>     and use it to decouple the meaning of recovery from a congestion event and
>     recovery from packet loss (TF_FASTRECOVERY) a la RFC2581. ECN and delay based
>     congestion control protocols don't generally need to recover from packet loss
>     and need a different way to note a congestion recovery episode within the
>     stack.
>   
>   - Remove the net.inet.tcp.newreno sysctl, which simplifies some portions of code
>     and ensures the stack always uses the appropriate mechanisms for recovering
>     from packet loss during a congestion recovery episode.
>   
>   - Extract the NewReno congestion control algorithm from the TCP stack and
>     massage it into module form. NewReno is always built into the kernel and will
>     remain the default algorithm for the forseeable future. Implementations of
>     additional different algorithms will become available in the near future.
>   
>   - Bump __FreeBSD_version to 900025 and note in UPDATING that rebuilding code
>     that relies on the size of "struct tcpcb" is required.
>   
>   Many thanks go to the Cisco University Research Program Fund at Community
>   Foundation Silicon Valley and the FreeBSD Foundation. Their support of our work
>   at the Centre for Advanced Internet Architectures, Swinburne University of
>   Technology is greatly appreciated.
>   
>   In collaboration with:	David Hayes <dahayes at swin edu au> and
>   			Grenville Armitage <garmitage at swin edu au>
>   Sponsored by:	Cisco URP, FreeBSD Foundation
>   Reviewed by:	rpaulo
>   Tested by:	David Hayes (and many others over the years)
>   MFC after:	3 months
> 
> Added:
>   head/sys/netinet/cc/
>   head/sys/netinet/cc.h   (contents, props changed)
>   head/sys/netinet/cc/cc.c   (contents, props changed)
>   head/sys/netinet/cc/cc_module.h   (contents, props changed)
>   head/sys/netinet/cc/cc_newreno.c   (contents, props changed)
> Modified:
>   head/UPDATING
>   head/sys/conf/files
>   head/sys/netinet/tcp_input.c
>   head/sys/netinet/tcp_output.c
>   head/sys/netinet/tcp_sack.c
>   head/sys/netinet/tcp_subr.c
>   head/sys/netinet/tcp_timer.c
>   head/sys/netinet/tcp_usrreq.c
>   head/sys/netinet/tcp_var.h
>   head/sys/sys/param.h

I screwed up a bit, and this commit also includes a diff to disable
seeding cwnd from the hostcache. Details about the issue and the diff
are here:

http://lists.freebsd.org/pipermail/freebsd-net/2010-November/026865.html

I should have gotten Andre to commit his patch first before committing
the modular CC patch, but I had pulled his patch into my development
tree and it all got rolled into one. To avoid a lot of mucking about, I
plan to do a direct commit MFC to the stable branches of only Andre's
patch in a week's time so that it makes it into 7.4/8.2. The MFC
schedule for the remainder of the modular CC patch will stay as it was
at 3 months. Once the modular CC work is MFC'd, the mergeinfo will go
back to being properly in sync and life will be good again.

Apologies for the mess.

Cheers,
Lawrence


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4CDDDD44.9070907>