From owner-svn-src-head@FreeBSD.ORG Mon Feb 21 11:56:12 2011 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 04283106566B; Mon, 21 Feb 2011 11:56:12 +0000 (UTC) (envelope-from lstewart@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E492A8FC08; Mon, 21 Feb 2011 11:56:11 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p1LBuB0d069557; Mon, 21 Feb 2011 11:56:11 GMT (envelope-from lstewart@svn.freebsd.org) Received: (from lstewart@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1LBuBUa069545; Mon, 21 Feb 2011 11:56:11 GMT (envelope-from lstewart@svn.freebsd.org) Message-Id: <201102211156.p1LBuBUa069545@svn.freebsd.org> From: Lawrence Stewart Date: Mon, 21 Feb 2011 11:56:11 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r218912 - in head/share/man: man4 man9 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 21 Feb 2011 11:56:12 -0000 Author: lstewart Date: Mon Feb 21 11:56:11 2011 New Revision: 218912 URL: http://svn.freebsd.org/changeset/base/218912 Log: Final commit to round out the "Five New TCP Congestion Control Algorithms for FreeBSD" FreeBSD Foundation funded project. - 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 and Grenville Armitage Sponsored by: FreeBSD Foundation MFC after: 3 months Added: head/share/man/man4/cc.4 (contents, props changed) head/share/man/man4/cc_chd.4 (contents, props changed) head/share/man/man4/cc_cubic.4 (contents, props changed) head/share/man/man4/cc_hd.4 (contents, props changed) head/share/man/man4/cc_htcp.4 (contents, props changed) head/share/man/man4/cc_newreno.4 (contents, props changed) head/share/man/man4/cc_vegas.4 (contents, props changed) head/share/man/man4/h_ertt.4 (contents, props changed) head/share/man/man9/cc.9 (contents, props changed) head/share/man/man9/hhook.9 (contents, props changed) head/share/man/man9/khelp.9 (contents, props changed) Modified: head/share/man/man4/Makefile head/share/man/man4/tcp.4 head/share/man/man9/Makefile Modified: head/share/man/man4/Makefile ============================================================================== --- head/share/man/man4/Makefile Mon Feb 21 10:08:47 2011 (r218911) +++ head/share/man/man4/Makefile Mon Feb 21 11:56:11 2011 (r218912) @@ -69,6 +69,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 \ @@ -131,6 +138,7 @@ MAN= aac.4 \ gif.4 \ gpib.4 \ gre.4 \ + h_ertt.4 \ harp.4 \ hatm.4 \ hfa.4 \ Added: head/share/man/man4/cc.4 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/share/man/man4/cc.4 Mon Feb 21 11:56:11 2011 (r218912) @@ -0,0 +1,118 @@ +.\" +.\" 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 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 4 +.Os +.Sh NAME +.Nm cc +.Nd Modular congestion control +.Sh DESCRIPTION +The modular congestion control framework allows the TCP implementation to +dynamically change the congestion control algorithm used by new and existing +connections. +Algorithms are identified by a unique +.Xr ascii 7 +name. +Algorithm modules can be compiled into the kernel or loaded as kernel modules +using the +.Xr kld 4 +facility. +.Pp +The default algorithm is NewReno, and all connections use the default unless +explicitly overridden using the TCP_CONGESTION socket option (see +.Xr tcp 4 +for details). +The default can be changed using a +.Xr sysctl 3 +MIB variable detailed in the +.Sx MIB Variables +section below. +.Sh MIB Variables +The framework exposes the following variables in the +.Va net.inet.tcp.cc +branch of the +.Xr sysctl 3 +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. +When attempting to change the default algorithm, this variable should be set to +one of the names listed by the +.Va net.inet.tcp.cc.available +MIB variable. +.El +.Sh SEE ALSO +.Xr cc_chd 4 , +.Xr cc_cubic 4 , +.Xr cc_hd 4 , +.Xr cc_htcp 4 , +.Xr cc_newreno 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 +modular congestion control framework first appeared in +.Fx 9.0 . +.Pp +The framework 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 +facility was written by +.An Lawrence Stewart Aq lstewart@FreeBSD.org , +.An James Healy Aq jimmy@deefa.com +and +.An David Hayes Aq david.hayes@ieee.org . +.Pp +This manual page was written by +.An David Hayes Aq david.hayes@ieee.org +and +.An Lawrence Stewart Aq lstewart@FreeBSD.org . Added: head/share/man/man4/cc_chd.4 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/share/man/man4/cc_chd.4 Mon Feb 21 11:56:11 2011 (r218912) @@ -0,0 +1,127 @@ +.\" +.\" 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_CHD 4 +.Os +.Sh NAME +.Nm cc_chd +.Nd CHD Congestion Control Algorithm +.Sh DESCRIPTION +CHD enhances the HD algorithm implemented in +.Xr cc_hd 4 . +It provides tolerance to non-congestion related packet loss and improvements to +coexistence with traditional loss-based TCP flows, especially when the +bottleneck link is lightly multiplexed. +.Pp +Like HD, the algorithm aims to keep network queuing delays below a particular +threshold (queue_threshold) and decides to reduce the congestion window (cwnd) +probabilistically based on its estimate of the network queuing delay. +.Pp +It differs from HD in three key aspects: +.Bl -bullet +.It +The probability of cwnd reduction due to congestion is calculated once per round +trip time instead of each time an acknowledgement is received as done by +.Xr cc_hd 4 . +.It +Packet losses that occur while the queuing delay is less than queue_threshold +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. +.Sh MIB Variables +The algorithm exposes the following tunable variables in the +.Va net.inet.tcp.cc.chd +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 RTT maximum backoff probability as a percentage. +Default is 50. +.It Va qmin +Minimum queuing delay threshold (qmin) in ticks. +Default is 5. +.It Va loss_fair +If 1, cwnd is adjusted using the shadow window when a congestion +related loss is detected. +Default is 1. +.It Va use_max +If 1, the maximum RTT seen within the measurement period is used as the basic +delay measurement for the algorithm, otherwise a sampled RTT measurement +is used. +Default is 1. +.El +.Sh SEE ALSO +.Xr cc 4 , +.Xr cc_cubic 4 , +.Xr cc_hd 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 "D. A. Hayes" +.%A "G. Armitage" +.%T "Improved coexistence and loss tolerance for delay based TCP congestion control" +.%J "in 35th Annual IEEE Conference on Local Computer Networks" +.%D "October 2010" +.%P "24-31" +.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 . Added: head/share/man/man4/cc_cubic.4 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/share/man/man4/cc_cubic.4 Mon Feb 21 11:56:11 2011 (r218912) @@ -0,0 +1,114 @@ +.\" +.\" Copyright (c) 2009 Lawrence Stewart +.\" 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 . Added: head/share/man/man4/cc_hd.4 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/share/man/man4/cc_hd.4 Mon Feb 21 11:56:11 2011 (r218912) @@ -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 . Added: head/share/man/man4/cc_htcp.4 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/share/man/man4/cc_htcp.4 Mon Feb 21 11:56:11 2011 (r218912) @@ -0,0 +1,136 @@ +.\" +.\" Copyright (c) 2008 Lawrence Stewart +.\" 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 . Added: head/share/man/man4/cc_newreno.4 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/share/man/man4/cc_newreno.4 Mon Feb 21 11:56:11 2011 (r218912) @@ -0,0 +1,82 @@ +.\" +.\" Copyright (c) 2009 Lawrence Stewart +.\" 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 . Added: head/share/man/man4/cc_vegas.4 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/share/man/man4/cc_vegas.4 Mon Feb 21 11:56:11 2011 (r218912) @@ -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 . Added: head/share/man/man4/h_ertt.4 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/share/man/man4/h_ertt.4 Mon Feb 21 11:56:11 2011 (r218912) @@ -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 *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***