Date: Sat, 28 May 2011 13:48:50 +0000 (UTC) From: Lawrence Stewart <lstewart@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org Subject: svn commit: r222419 - in stable/8/share/man: man4 man9 Message-ID: <201105281348.p4SDmoYd086645@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: lstewart Date: Sat May 28 13:48:49 2011 New Revision: 222419 URL: http://svn.freebsd.org/changeset/base/222419 Log: MFC r218912,218945,220237: - Add new man pages for the modular congestion control, Khelp and Hhook frameworks (cc.4, cc.9, khelp.9 and hhook.9). - Add new man pages for each available congestion control algorithm (cc_chd.4, cc_cubic.4, cc_hd.4, cc_htcp.4, cc_newreno.4 and cc_vegas.4). - Add a new man page for the Enhanced Round Trip Time (ERTT) Khelp module (h_ertt.4). - Update the TCP (tcp.4) man page to mention the TCP_CONGESTION socket option, cross reference to cc.4 and remove references to the retired "net.inet.tcp.newreno" sysctl MIB variable. In collaboration with: David Hayes <dahayes at swin edu au> and Grenville Armitage <garmitage at swin edu au> Sponsored by: FreeBSD Foundation Added: stable/8/share/man/man4/cc.4 - copied, changed from r218912, head/share/man/man4/cc.4 stable/8/share/man/man4/cc_chd.4 - copied, changed from r218912, head/share/man/man4/cc_chd.4 stable/8/share/man/man4/cc_cubic.4 - copied unchanged from r218912, head/share/man/man4/cc_cubic.4 stable/8/share/man/man4/cc_hd.4 - copied unchanged from r218912, head/share/man/man4/cc_hd.4 stable/8/share/man/man4/cc_htcp.4 - copied unchanged from r218912, head/share/man/man4/cc_htcp.4 stable/8/share/man/man4/cc_newreno.4 - copied unchanged from r218912, head/share/man/man4/cc_newreno.4 stable/8/share/man/man4/cc_vegas.4 - copied unchanged from r218912, head/share/man/man4/cc_vegas.4 stable/8/share/man/man4/h_ertt.4 - copied unchanged from r218912, head/share/man/man4/h_ertt.4 stable/8/share/man/man9/cc.9 - copied unchanged from r218912, head/share/man/man9/cc.9 stable/8/share/man/man9/hhook.9 - copied unchanged from r218912, head/share/man/man9/hhook.9 stable/8/share/man/man9/khelp.9 - copied unchanged from r218912, head/share/man/man9/khelp.9 Modified: stable/8/share/man/man4/Makefile stable/8/share/man/man4/tcp.4 stable/8/share/man/man9/Makefile Directory Properties: stable/8/share/man/ (props changed) stable/8/share/man/man1/ (props changed) stable/8/share/man/man3/ (props changed) stable/8/share/man/man4/ (props changed) stable/8/share/man/man5/ (props changed) stable/8/share/man/man7/ (props changed) stable/8/share/man/man8/ (props changed) stable/8/share/man/man9/ (props changed) Modified: stable/8/share/man/man4/Makefile ============================================================================== --- stable/8/share/man/man4/Makefile Sat May 28 11:37:47 2011 (r222418) +++ stable/8/share/man/man4/Makefile Sat May 28 13:48:49 2011 (r222419) @@ -67,6 +67,13 @@ MAN= aac.4 \ cardbus.4 \ carp.4 \ cas.4 \ + cc.4 \ + cc_chd.4 \ + cc_cubic.4 \ + cc_hd.4 \ + cc_htcp.4 \ + cc_newreno.4 \ + cc_vegas.4 \ ccd.4 \ cd.4 \ cdce.4 \ @@ -127,6 +134,7 @@ MAN= aac.4 \ gif.4 \ gpib.4 \ gre.4 \ + h_ertt.4 \ harp.4 \ hatm.4 \ hfa.4 \ Copied and modified: stable/8/share/man/man4/cc.4 (from r218912, head/share/man/man4/cc.4) ============================================================================== --- head/share/man/man4/cc.4 Mon Feb 21 11:56:11 2011 (r218912, copy source) +++ stable/8/share/man/man4/cc.4 Sat May 28 13:48:49 2011 (r222419) @@ -65,8 +65,6 @@ MIB: .Bl -tag -width ".Va available" .It Va available Read-only list of currently available congestion control algorithms by name. -.El -.Bl -tag -width ".Va algorithm" .It Va algorithm Returns the current default congestion control algorithm when read, and changes the default when set. Copied and modified: stable/8/share/man/man4/cc_chd.4 (from r218912, head/share/man/man4/cc_chd.4) ============================================================================== --- head/share/man/man4/cc_chd.4 Mon Feb 21 11:56:11 2011 (r218912, copy source) +++ stable/8/share/man/man4/cc_chd.4 Sat May 28 13:48:49 2011 (r222419) @@ -58,6 +58,7 @@ do not cause cwnd to be reduced. .It CHD uses a shadow window to help regain lost transmission opportunities when competing with loss-based TCP flows. +.El .Sh MIB Variables The algorithm exposes the following tunable variables in the .Va net.inet.tcp.cc.chd Copied: stable/8/share/man/man4/cc_cubic.4 (from r218912, head/share/man/man4/cc_cubic.4) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ stable/8/share/man/man4/cc_cubic.4 Sat May 28 13:48:49 2011 (r222419, copy of r218912, head/share/man/man4/cc_cubic.4) @@ -0,0 +1,114 @@ +.\" +.\" Copyright (c) 2009 Lawrence Stewart <lstewart@FreeBSD.org> +.\" Copyright (c) 2010-2011 The FreeBSD Foundation +.\" All rights reserved. +.\" +.\" Portions of this documentation were written at the Centre for Advanced +.\" Internet Architectures, Swinburne University, Melbourne, Australia by +.\" David Hayes under sponsorship from the FreeBSD Foundation. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR +.\" ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" $FreeBSD$ +.\" +.Dd February 15, 2011 +.Dt CC_CUBIC 4 +.Os +.Sh NAME +.Nm cc_cubic +.Nd CUBIC Congestion Control Algorithm +.Sh DESCRIPTION +The CUBIC congestion control algorithm was designed to provide increased +throughput in fast and long-distance networks. +It attempts to maintain fairness when competing with legacy NewReno TCP in lower +speed scenarios where NewReno is able to operate adequately. +.Pp +The congestion window is increased as a function of the time elapsed since the +last congestion event. +During regular operation, the window increase function follows a cubic function, +with the inflection point set to be the congestion window value reached at the +last congestion event. +CUBIC also calculates an estimate of the congestion window that NewReno would +have achieved at a given time after a congestion event. +When updating the congestion window, the algorithm will choose the larger of the +calculated CUBIC and estimated NewReno windows. +.Pp +CUBIC also backs off less on congestion by changing the multiplicative decrease +factor from 1/2 (used by standard NewReno TCP) to 4/5. +.Pp +The implementation was done in a clean-room fashion, and is based on the +Internet Draft and paper referenced in the +.Sx SEE ALSO +section below. +.Sh MIB Variables +There are currently no tunable MIB variables. +.Sh SEE ALSO +.Xr cc 4 , +.Xr cc_chd 4 , +.Xr cc_hd 4 , +.Xr cc_htcp 4 , +.Xr cc_newreno 4 , +.Xr cc_vegas 4 , +.Xr tcp 4 , +.Xr cc 9 +.Rs +.%A "Sangtae Ha" +.%A "Injong Rhee" +.%A "Lisong Xu" +.%T "CUBIC for Fast Long-Distance Networks" +.%U "http://tools.ietf.org/id/draft-rhee-tcpm-cubic-02.txt" +.Re +.Rs +.%A "Sangtae Ha" +.%A "Injong Rhee" +.%A "Lisong Xu" +.%T "CUBIC: a new TCP-friendly high-speed TCP variant" +.%J "SIGOPS Oper. Syst. Rev." +.%V "42" +.%N "5" +.%D "July 2008" +.%P "64-74" +.Re +.Sh ACKNOWLEDGEMENTS +Development and testing of this software were made possible in part by grants +from the FreeBSD Foundation and Cisco University Research Program Fund at +Community Foundation Silicon Valley. +.Sh HISTORY +The +.Nm +congestion control module first appeared in +.Fx 9.0 . +.Pp +The module was first released in 2009 by Lawrence Stewart whilst studying at +Swinburne University's Centre for Advanced Internet Architectures, Melbourne, +Australia. +More details are available at: +.Pp +http://caia.swin.edu.au/urp/newtcp/ +.Sh AUTHORS +.An -nosplit +The +.Nm +congestion control module and this manual page were written by +.An Lawrence Stewart Aq lstewart@FreeBSD.org +and +.An David Hayes Aq david.hayes@ieee.org . Copied: stable/8/share/man/man4/cc_hd.4 (from r218912, head/share/man/man4/cc_hd.4) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ stable/8/share/man/man4/cc_hd.4 Sat May 28 13:48:49 2011 (r222419, copy of r218912, head/share/man/man4/cc_hd.4) @@ -0,0 +1,120 @@ +.\" +.\" Copyright (c) 2010-2011 The FreeBSD Foundation +.\" All rights reserved. +.\" +.\" This documentation was written at the Centre for Advanced Internet +.\" Architectures, Swinburne University, Melbourne, Australia by David Hayes +.\" under sponsorship from the FreeBSD Foundation. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR +.\" ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" $FreeBSD$ +.\" +.Dd February 15, 2011 +.Dt CC_HD 4 +.Os +.Sh NAME +.Nm cc_hd +.Nd HD Congestion Control Algorithm +.Sh DESCRIPTION +The HD congestion control algorithm is an implementation of the Hamilton +Institute's delay-based congestion control which aims to keep network queuing +delays below a particular threshold (queue_threshold). +.Pp +HD probabilistically reduces the congestion window (cwnd) based on its estimate +of the network queuing delay. +The probability of reducing cwnd is zero at hd_qmin or less, rising to a maximum +at queue_threshold, and then back to zero at the maximum queuing delay. +.Pp +Loss-based congestion control algorithms such as NewReno probe for network +capacity by filling queues until there is a packet loss. +HD competes with loss-based congestion control algorithms by allowing its +probability of reducing cwnd to drop from a maximum at queue_threshold to be +zero at the maximum queuing delay. +This has been shown to work well when the bottleneck link is highly multiplexed. +.Sh MIB Variables +The algorithm exposes the following tunable variables in the +.Va net.inet.tcp.cc.hd +branch of the +.Xr sysctl 3 +MIB: +.Bl -tag -width ".Va queue_threshold" +.It Va queue_threshold +Queueing congestion threshold (qth) in ticks. +Default is 20. +.It Va pmax +Per packet maximum backoff probability as a percentage. +Default is 5. +.It Va qmin +Minimum queuing delay threshold (qmin) in ticks. +Default is 5. +.El +.Sh SEE ALSO +.Xr cc 4 , +.Xr cc_chd 4 , +.Xr cc_cubic 4 , +.Xr cc_htcp 4 , +.Xr cc_newreno 4 , +.Xr cc_vegas 4 , +.Xr h_ertt 4 , +.Xr tcp 4 , +.Xr cc 9 , +.Xr khelp 9 +.Rs +.%A "L. Budzisz" +.%A "R. Stanojevic" +.%A "R. Shorten" +.%A "F. Baker" +.%T "A strategy for fair coexistence of loss and delay-based congestion control algorithms" +.%J "IEEE Commun. Lett." +.%D "Jul 2009" +.%V "13" +.%N "7" +.%P "555-557" +.Re +.Sh ACKNOWLEDGEMENTS +Development and testing of this software were made possible in part by grants +from the FreeBSD Foundation and Cisco University Research Program Fund at +Community Foundation Silicon Valley. +.Sh FUTURE WORK +The Hamilton Institute have recently made some improvements to the algorithm +implemented by this module and have called it Coexistent-TCP (C-TCP). +The improvments should be evaluated and potentially incorporated into this +module. +.Sh HISTORY +The +.Nm +congestion control module first appeared in +.Fx 9.0 . +.Pp +The module was first released in 2010 by David Hayes whilst working on the +NewTCP research project at Swinburne University's Centre for Advanced Internet +Architectures, Melbourne, Australia. +More details are available at: +.Pp +http://caia.swin.edu.au/urp/newtcp/ +.Sh AUTHORS +.An -nosplit +The +.Nm +congestion control module and this manual page were written by +.An David Hayes Aq david.hayes@ieee.org . Copied: stable/8/share/man/man4/cc_htcp.4 (from r218912, head/share/man/man4/cc_htcp.4) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ stable/8/share/man/man4/cc_htcp.4 Sat May 28 13:48:49 2011 (r222419, copy of r218912, head/share/man/man4/cc_htcp.4) @@ -0,0 +1,136 @@ +.\" +.\" Copyright (c) 2008 Lawrence Stewart <lstewart@FreeBSD.org> +.\" Copyright (c) 2010-2011 The FreeBSD Foundation +.\" All rights reserved. +.\" +.\" Portions of this documentation were written at the Centre for Advanced +.\" Internet Architectures, Swinburne University, Melbourne, Australia by +.\" David Hayes under sponsorship from the FreeBSD Foundation. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR +.\" ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" $FreeBSD$ +.\" +.Dd February 15, 2011 +.Dt CC_HTCP 4 +.Os +.Sh NAME +.Nm cc_htcp +.Nd H-TCP Congestion Control Algorithm +.Sh DESCRIPTION +The H-TCP congestion control algorithm was designed to provide increased +throughput in fast and long-distance networks. +It attempts to maintain fairness when competing with legacy NewReno TCP in lower +speed scenarios where NewReno is able to operate adequately. +.Pp +The congestion window is increased as a function of the time elapsed since the +last congestion event. +The window increase algorithm operates like NewReno for the first second after a +congestion event, and then switches to a high-speed mode based on a quadratic +increase function. +.Pp +The implementation was done in a clean-room fashion, and is based on the +Internet Draft and other documents referenced in the +.Sx SEE ALSO +section below. +.Sh MIB Variables +The algorithm exposes the following tunable variables in the +.Va net.inet.tcp.cc.htcp +branch of the +.Xr sysctl 3 +MIB: +.Bl -tag -width ".Va adaptive_backoff" +.It Va adaptive_backoff +Controls use of the adaptive backoff algorithm, which is designed to keep +network queues non-empty during congestion recovery episodes. +Default is 0 (disabled). +.It Va rtt_scaling +Controls use of the RTT scaling algorithm, which is designed to make congestion +window increase during congestion avoidance mode invariant with respect to RTT. +Default is 0 (disabled). +.El +.Sh SEE ALSO +.Xr cc 4 , +.Xr cc_chd 4 , +.Xr cc_cubic 4 , +.Xr cc_hd 4 , +.Xr cc_newreno 4 , +.Xr cc_vegas 4 , +.Xr tcp 4 , +.Xr cc 9 +.Rs +.%A "D. Leith" +.%A "R. Shorten" +.%T "H-TCP: TCP Congestion Control for High Bandwidth-Delay Product Paths" +.%U "http://tools.ietf.org/id/draft-leith-tcp-htcp-06.txt" +.Re +.Rs +.%A "D. Leith" +.%A "R. Shorten" +.%A "T. Yee" +.%T "H-TCP: A framework for congestion control in high-speed and long-distance networks" +.%B "Proc. PFLDnet" +.%D "2005" +.Re +.Rs +.%A "G. Armitage" +.%A "L. Stewart" +.%A "M. Welzl" +.%A "J. Healy" +.%T "An independent H-TCP implementation under FreeBSD 7.0: description and observed behaviour" +.%J "SIGCOMM Comput. Commun. Rev." +.%V "38" +.%N "3" +.%D "July 2008" +.%P "27-38" +.Re +.Sh ACKNOWLEDGEMENTS +Development and testing of this software were made possible in part by grants +from the FreeBSD Foundation and Cisco University Research Program Fund at +Community Foundation Silicon Valley. +.Sh HISTORY +The +.Nm +congestion control module first appeared in +.Fx 9.0 . +.Pp +The module was first released in 2007 by James Healy and Lawrence Stewart whilst +working on the NewTCP research project at Swinburne University's Centre for +Advanced Internet Architectures, Melbourne, Australia, which was made possible +in part by a grant from the Cisco University Research Program Fund at Community +Foundation Silicon Valley. +More details are available at: +.Pp +http://caia.swin.edu.au/urp/newtcp/ +.Sh AUTHORS +.An -nosplit +The +.Nm +congestion control module was written by +.An James Healy Aq jimmy@deefa.com +and +.An Lawrence Stewart Aq lstewart@FreeBSD.org . +.Pp +This manual page was written by +.An Lawrence Stewart Aq lstewart@FreeBSD.org +and +.An David Hayes Aq david.hayes@ieee.org . Copied: stable/8/share/man/man4/cc_newreno.4 (from r218912, head/share/man/man4/cc_newreno.4) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ stable/8/share/man/man4/cc_newreno.4 Sat May 28 13:48:49 2011 (r222419, copy of r218912, head/share/man/man4/cc_newreno.4) @@ -0,0 +1,82 @@ +.\" +.\" Copyright (c) 2009 Lawrence Stewart <lstewart@FreeBSD.org> +.\" Copyright (c) 2011 The FreeBSD Foundation +.\" All rights reserved. +.\" +.\" Portions of this documentation were written at the Centre for Advanced +.\" Internet Architectures, Swinburne University, Melbourne, Australia by +.\" Lawrence Stewart under sponsorship from the FreeBSD Foundation. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR +.\" ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" $FreeBSD$ +.\" +.Dd February 15, 2011 +.Dt CC_NEWRENO 4 +.Os +.Sh NAME +.Nm cc_newreno +.Nd NewReno Congestion Control Algorithm +.Sh DESCRIPTION +The NewReno congestion control algorithm is the default for TCP. +Details about the algorithm can be found in RFC5681. +.Sh MIB Variables +There are currently no tunable MIB variables. +.Sh SEE ALSO +.Xr cc 4 , +.Xr cc_chd 4 , +.Xr cc_cubic 4 , +.Xr cc_hd 4 , +.Xr cc_htcp 4 , +.Xr cc_vegas 4 , +.Xr tcp 4 , +.Xr cc 9 +.Sh ACKNOWLEDGEMENTS +Development and testing of this software were made possible in part by grants +from the FreeBSD Foundation and Cisco University Research Program Fund at +Community Foundation Silicon Valley. +.Sh HISTORY +The +.Nm +congestion control algorithm first appeared in its modular form in +.Fx 9.0 . +.Pp +The module was first released in 2007 by James Healy and Lawrence Stewart whilst +working on the NewTCP research project at Swinburne University's Centre for +Advanced Internet Architectures, Melbourne, Australia, which was made possible +in part by a grant from the Cisco University Research Program Fund at Community +Foundation Silicon Valley. +More details are available at: +.Pp +http://caia.swin.edu.au/urp/newtcp/ +.Sh AUTHORS +.An -nosplit +The +.Nm +congestion control module was written by +.An James Healy Aq jimmy@deefa.com , +.An Lawrence Stewart Aq lstewart@FreeBSD.org +and +.An David Hayes Aq david.hayes@ieee.org . +.Pp +This manual page was written by +.An Lawrence Stewart Aq lstewart@FreeBSD.org . Copied: stable/8/share/man/man4/cc_vegas.4 (from r218912, head/share/man/man4/cc_vegas.4) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ stable/8/share/man/man4/cc_vegas.4 Sat May 28 13:48:49 2011 (r222419, copy of r218912, head/share/man/man4/cc_vegas.4) @@ -0,0 +1,138 @@ +.\" +.\" Copyright (c) 2010-2011 The FreeBSD Foundation +.\" All rights reserved. +.\" +.\" This documentation was written at the Centre for Advanced Internet +.\" Architectures, Swinburne University, Melbourne, Australia by David Hayes +.\" under sponsorship from the FreeBSD Foundation. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR +.\" ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" $FreeBSD$ +.\" +.Dd February 15, 2011 +.Dt CC_VEGAS 4 +.Os +.Sh NAME +.Nm cc_vegas +.Nd Vegas Congestion Control Algorithm +.Sh DESCRIPTION +The Vegas congestion control algorithm uses what the authors term the actual and +expected transmission rates to determine whether there is congestion along the +network path i.e. +.Pp +.Bl -item -offset indent +.It +actual rate = (total data sent in a RTT) / RTT +.It +expected rate = cwnd / RTTmin +.It +diff = expected - actual +.El +.Pp +where RTT is the measured instantaneous round trip time and RTTmin is the +smallest round trip time observed during the connection. +.Pp +The algorithm aims to keep diff between two parameters alpha and beta, such +that: +.Pp +.Bl -item -offset indent +.It +alpha < diff < beta +.El +.Pp +If diff > beta, congestion is inferred and cwnd is decremented by one packet (or +the maximum TCP segment size). +If diff < alpha, then cwnd is incremented by one packet. +Alpha and beta govern the amount of buffering along the path. +.Pp +The implementation was done in a clean-room fashion, and is based on the +paper referenced in the +.Sx SEE ALSO +section below. +.Sh IMPLEMENTATION NOTES +The time from the transmission of a marked packet until the receipt of an +acknowledgement for that packet is measured once per RTT. +This implementation does not implement Brakmo's and Peterson's original +duplicate ACK policy since clock ticks in today's machines are not as coarse as +they were (i.e. 500ms) when Vegas was originally designed. +Note that modern TCP recovery processes such as fast retransmit and SACK are +enabled by default in the TCP stack. +.Sh MIB Variables +The algorithm exposes the following tunable variables in the +.Va net.inet.tcp.cc.vegas +branch of the +.Xr sysctl 3 +MIB: +.Bl -tag -width ".Va alpha" +.It Va alpha +Query or set the Vegas alpha parameter as a number of buffers on the path. +When setting alpha, the value must satisfy: 0 < alpha < beta. +Default is 1. +.It Va beta +Query or set the Vegas beta parameter as a number of buffers on the path. +When setting beta, the value must satisfy: 0 < alpha < beta. +Default is 3. +.El +.Sh SEE ALSO +.Xr cc 4 , +.Xr cc_chd 4 , +.Xr cc_cubic 4 , +.Xr cc_hd 4 , +.Xr cc_htcp 4 , +.Xr cc_newreno 4 , +.Xr h_ertt 4 , +.Xr tcp 4 , +.Xr cc 9 , +.Xr khelp 9 +.Rs +.%A "L. S. Brakmo" +.%A "L. L. Peterson" +.%T "TCP Vegas: end to end congestion avoidance on a global internet" +.%J "IEEE J. Sel. Areas Commun." +.%D "October 1995" +.%V "13" +.%N "8" +.%P "1465-1480" +.Re +.Sh ACKNOWLEDGEMENTS +Development and testing of this software were made possible in part by grants +from the FreeBSD Foundation and Cisco University Research Program Fund at +Community Foundation Silicon Valley. +.Sh HISTORY +The +.Nm +congestion control module first appeared in +.Fx 9.0 . +.Pp +The module was first released in 2010 by David Hayes whilst working on the +NewTCP research project at Swinburne University's Centre for Advanced Internet +Architectures, Melbourne, Australia. +More details are available at: +.Pp +http://caia.swin.edu.au/urp/newtcp/ +.Sh AUTHORS +.An -nosplit +The +.Nm +congestion control module and this manual page were written by +.An David Hayes Aq david.hayes@ieee.org . Copied: stable/8/share/man/man4/h_ertt.4 (from r218912, head/share/man/man4/h_ertt.4) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ stable/8/share/man/man4/h_ertt.4 Sat May 28 13:48:49 2011 (r222419, copy of r218912, head/share/man/man4/h_ertt.4) @@ -0,0 +1,143 @@ +.\" +.\" Copyright (c) 2010-2011 The FreeBSD Foundation +.\" All rights reserved. +.\" +.\" This documentation was written at the Centre for Advanced Internet +.\" Architectures, Swinburne University, Melbourne, Australia by David Hayes +.\" under sponsorship from the FreeBSD Foundation. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR +.\" ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" $FreeBSD$ +.\" +.Dd February 15, 2011 +.Dt h_ertt 9 +.Os +.Sh NAME +.Nm h_ertt +.Nd Enhanced Round Trip Time Khelp module +.Sh SYNOPSIS +.In netinet/khelp/h_ertt.h +.Sh DESCRIPTION +The +.Nm +Khelp module works within the +.Xr khelp 9 +framework to provide TCP with a per-connection, low noise estimate of the +instantaneous RTT. +The implementation attempts to be robust in the face of delayed +acknowledgements, TCP Segmentation Offload (TSO), receivers who manipulate TCP +timestamps and lack of the TCP timestamp option altogether. +.Pp +TCP receivers using delayed acknowledgements either acknowledge every second packet +(reflecting the time stamp of the first) or use a timeout to trigger the +acknowledgement if no second packet arrives. +If the heuristic used by +.Nm +determines that the receiver is using delayed acknowledgements, it measures the +RTT using the second packet (the one that triggers the acknowledgement). +It does not measure the RTT if the acknowledgement is for the +first packet, since it cannot be accurately determined. +.Pp +When TSO is in use, +.Nm +will momentarily disable TSO whilst marking a packet to use for a new +measurement. +The process has negligible impact on the connection. +.Pp +.Nm +associates the following struct with each connection's TCP control block: +.Bd -literal +struct ertt { + TAILQ_HEAD(txseginfo_head, txseginfo) txsegi_q; /* Private. */ + long bytes_tx_in_rtt; /* Private. */ + long bytes_tx_in_marked_rtt; + unsigned long marked_snd_cwnd; + int rtt; + int maxrtt; + int minrtt; + int dlyack_rx; /* Private. */ + int timestamp_errors; /* Private. */ + int markedpkt_rtt; /* Private. */ + uint32_t flags; +}; +.Ed +.Pp +The fields marked as private should not be manipulated by any code outside of +the +.Nm +implementation. +The non-private fields provide the following data: +.Bl -tag -width ".Va bytes_tx_in_marked_rtt" -offset indent +.It Va bytes_tx_in_marked_rtt +The number of bytes transmitted in the +.Va markedpkt_rtt . +.It Va marked_snd_cwnd +The value of cwnd for the marked rtt measurement. +.It Va rtt +The most recent RTT measurement. +.It Va maxrtt +The longest RTT measurement that has been taken. +.It Va minrtt +The shortest RTT measurement that has been taken. +.It Va flags +The ERTT_NEW_MEASUREMENT flag will be set by the implementation when a new +measurement is available. +It is the responsibility of +.Nm +consumers to unset the flag if they wish to use it as a notification method for +new measurements. +.El +.Sh SEE ALSO +.Xr cc 4 , +.Xr cc_chd 4 , +.Xr cc_hd 4 , +.Xr cc_vegas 4 , +.Xr hhook 9 , +.Xr khelp 9 +.Sh ACKNOWLEDGEMENTS +Development and testing of this software were made possible in part by grants +from the FreeBSD Foundation and Cisco University Research Program Fund at +Community Foundation Silicon Valley. +.Sh HISTORY +The +.Nm +module first appeared in +.Fx 9.0 . +.Pp +The module was first released in 2010 by David Hayes whilst working on the +NewTCP research project at Swinburne University's Centre for Advanced Internet +Architectures, Melbourne, Australia. +More details are available at: +.Pp +http://caia.swin.edu.au/urp/newtcp/ +.Sh AUTHORS +.An -nosplit +The +.Nm +Khelp module and this manual page were written by +.An David Hayes Aq david.hayes@ieee.org . +.Sh BUGS +The module maintains enhanced RTT estimates for all new TCP connections created +after the time at which the module was loaded. +It might be beneficial to see if it is possible to have the module only affect +connections which actually care about ERTT estimates. Modified: stable/8/share/man/man4/tcp.4 ============================================================================== --- stable/8/share/man/man4/tcp.4 Sat May 28 11:37:47 2011 (r222418) +++ stable/8/share/man/man4/tcp.4 Sat May 28 13:48:49 2011 (r222419) @@ -1,5 +1,11 @@ .\" Copyright (c) 1983, 1991, 1993 -.\" The Regents of the University of California. All rights reserved. +.\" The Regents of the University of California. +.\" Copyright (c) 2010-2011 The FreeBSD Foundation +.\" All rights reserved. +.\" +.\" Portions of this documentation were written at the Centre for Advanced +.\" Internet Architectures, Swinburne University of Technology, Melbourne, +.\" Australia by David Hayes under sponsorship from the FreeBSD Foundation. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions @@ -32,7 +38,7 @@ .\" From: @(#)tcp.4 8.1 (Berkeley) 6/5/93 .\" $FreeBSD$ .\" -.Dd January 8, 2011 +.Dd February 15, 2011 .Dt TCP 4 .Os .Sh NAME @@ -116,7 +122,7 @@ supports a number of socket options whic .Xr setsockopt 2 and tested with .Xr getsockopt 2 : -.Bl -tag -width ".Dv TCP_NODELAY" +.Bl -tag -width ".Dv TCP_CONGESTION" .It Dv TCP_INFO Information about a socket's underlying TCP session may be retrieved by passing the read-only option @@ -134,6 +140,12 @@ send window size, receive window size, and bandwidth-controlled window space. +.It Dv TCP_CONGESTION +Select or query the congestion control algorithm that TCP will use for the +connection. +See +.Xr cc 4 +for details. .It Dv TCP_NODELAY Under most circumstances, .Tn TCP @@ -231,6 +243,14 @@ see .Xr ip 4 . Incoming connection requests that are source-routed are noted, and the reverse source route is used in responding. +.Pp +The default congestion control algorithm for +.Tn TCP +is +.Xr cc_newreno 4 . +Other congestion control algorithms can be made available using the +.Xr cc 4 +framework. .Ss MIB Variables The .Tn TCP @@ -322,11 +342,6 @@ See Delay ACK to try and piggyback it onto a data packet. .It Va delacktime Maximum amount of time, in milliseconds, before a delayed ACK is sent. -.It Va newreno -Enable -.Tn TCP -NewReno Fast Recovery algorithm, -as described in RFC 2582. .It Va path_mtu_discovery Enable Path MTU Discovery. .It Va tcbhashsize @@ -561,6 +576,7 @@ address. .Xr socket 2 , .Xr sysctl 3 , .Xr blackhole 4 , +.Xr cc 4 , .Xr inet 4 , .Xr intro 4 , .Xr ip 4 , Modified: stable/8/share/man/man9/Makefile ============================================================================== --- stable/8/share/man/man9/Makefile Sat May 28 11:37:47 2011 (r222418) +++ stable/8/share/man/man9/Makefile Sat May 28 13:48:49 2011 (r222419) @@ -43,6 +43,7 @@ MAN= accept_filter.9 \ BUS_SETUP_INTR.9 \ bus_space.9 \ byteorder.9 \ + cc.9 \ cd.9 \ condvar.9 \ config_intrhook.9 \ @@ -122,6 +123,7 @@ MAN= accept_filter.9 \ hash.9 \ hashinit.9 \ hexdump.9 \ + hhook.9 \ ieee80211.9 \ ieee80211_amrr.9 \ ieee80211_beacon.9 \ @@ -144,6 +146,7 @@ MAN= accept_filter.9 \ KASSERT.9 \ kernacc.9 \ kernel_mount.9 \ + khelp.9 \ kobj.9 \ kproc.9 \ kqueue.9 \ Copied: stable/8/share/man/man9/cc.9 (from r218912, head/share/man/man9/cc.9) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ stable/8/share/man/man9/cc.9 Sat May 28 13:48:49 2011 (r222419, copy of r218912, head/share/man/man9/cc.9) @@ -0,0 +1,333 @@ +.\" +.\" Copyright (c) 2008-2009 Lawrence Stewart <lstewart@FreeBSD.org> +.\" Copyright (c) 2010-2011 The FreeBSD Foundation +.\" All rights reserved. +.\" +.\" Portions of this documentation were written at the Centre for Advanced +.\" Internet Architectures, Swinburne University, Melbourne, Australia by +.\" David Hayes and Lawrence Stewart under sponsorship from the +.\" FreeBSD Foundation. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR +.\" ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" $FreeBSD$ +.\" +.Dd February 15, 2011 +.Dt CC 9 +.Os +.Sh NAME +.Nm cc , +.Nm DECLARE_CC_MODULE , +.Nm CC_VAR +.Nd Modular Congestion Control +.Sh SYNOPSIS +.In netinet/cc.h +.In netinet/cc/cc_module.h +.Fn DECLARE_CC_MODULE "ccname" "ccalgo" +.Fn CC_VAR "ccv" "what" +.Sh DESCRIPTION +The +.Nm +framework allows congestion control algorithms to be implemented as dynamically +loadable kernel modules via the +.Xr kld 4 +facility. +Transport protocols can select from the list of available algorithms on a +connection-by-connection basis, or use the system default (see +.Xr cc 4 +for more details). +.Pp +.Nm +modules are identified by an +.Xr ascii 7 +name and set of hook functions encapsulated in a +.Vt "struct cc_algo" , +which has the following members: +.Bd -literal -offset indent +struct cc_algo { + char name[TCP_CA_NAME_MAX]; + int (*mod_init) (void); + int (*mod_destroy) (void); + int (*cb_init) (struct cc_var *ccv); + void (*cb_destroy) (struct cc_var *ccv); + void (*conn_init) (struct cc_var *ccv); + void (*ack_received) (struct cc_var *ccv, uint16_t type); + void (*cong_signal) (struct cc_var *ccv, uint32_t type); + void (*post_recovery) (struct cc_var *ccv); + void (*after_idle) (struct cc_var *ccv); +}; +.Ed +.Pp +The +.Va name +field identifies the unique name of the algorithm, and should be no longer than +TCP_CA_NAME_MAX-1 characters in length (the TCP_CA_NAME_MAX define lives in +.In netinet/tcp.h +for compatibility reasons). +.Pp +The +.Va mod_init +function is called when a new module is loaded into the system but before the +registration process is complete. +It should be implemented if a module needs to set up some global state prior to +being available for use by new connections. +Returning a non-zero value from +.Va mod_init *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201105281348.p4SDmoYd086645>