Centre for Advanced Internet Architectures, Swinburne University of Technology, Melbourne, Australia CRICOS number 00111D 26 March, 2011 ---------------------------------------------- OVERVIEW ---------------------------------------------- CDG (CAIA Delay-Gradient) is a TCP congestion control module that modifies the TCP sender in order to use the delay gradient as a congestion indicator. It uses an exponential probabilistic based backoff for delay-gradient congestion indications, and includes a number of initiatives to help it compete with loss-based congestion control flows (such as NewReno, cubic, compoundTCP, etc). It also has inbuilt tolerance to non-congestion related packet loss. See [1] for details about the mechanisms. ---------------------------------------------- LICENCE ---------------------------------------------- The FreeBSD cc_cdg module is released under a BSD licence. Refer to licence headers in each source file for further details. ---------------------------------------------- INSTALLATION ---------------------------------------------- See top of patch file for instructions on how to patch FreeBSD 9.x. ---------------------------------------------- USAGE ---------------------------------------------- To load module: kldload cc_cdg To unload module: kldunload cc_cdg ---------------------------------------------- COMPILE TIME CONFIGURATION ---------------------------------------------- There are currently no compile-time configuration options. ---------------------------------------------- RUN TIME CONFIGURATION ---------------------------------------------- CDG is an experimental congestion control algorithm with a number of runtime configuration options. These can be set via the sysctl interface. The following parameters and their defaults can be configured. net.inet.tcp.cc.cdg.wdf This variable adjusts the amount the TCP congestion window is decreased when there is a delay based congestion indication. (w = w - wdf*w/100 where wdf >= 1). Default is 50, ie a 50% reduction. net.inet.tcp.cc.cdg.loss_wdf This variable adjusts the amount the TCP congestion window is decreased when there is a delay based congestion indication. Default is 50, ie a 50% reduction (Reno like behaviour). net.inet.tcp.cc.cdg.wif This allows cdg to more aggressively increase its window to better utilise high BDP links. It is a additive increase mechanism where the amount of additive increase can be increased ofter wif RTTs with no congestion. (w = w + i, where i is incremented every wif RTTs or i=1 if wif = 0) Default is 0 (Reno like behaviour). net.inet.tcp.cc.cdg.exp_backoff_scale Scaling parameter for the probabilistic exponential backoff. Default is 3. net.inet.tcp.cc.cdg.smoothing_factor Number of samples used in the moving average smoothing (0 - no smoothing). Default is 8. net.inet.tcp.cc.loss_compete_consec_cong, Number of consecutive delay gradient based congestion episodes which will trigger a hold on delay gradient based backoffs for loss based CC compatibility. Default is 5 net.inet.tcp.cc.loss_compete_hold_backoff Number of consecutive delay gradient based congestion episodes to hold the window backoff for loss based CC compatibility. Default is 5. ---------------------------------------------- ACKNOWLEDGEMENTS ---------------------------------------------- This project has been made possible in part by a grant from the Cisco University Research Program Fund at Community Foundation Silicon Valley. Testing and development was further assisted by a grant from the FreeBSD Foundation. ---------------------------------------------- RELATED READING ---------------------------------------------- This software was developed at Swinburne University's Centre for Advanced Internet Architectures, under the umbrella of the NewTCP research project. More information on the project is available at: http://caia.swin.edu.au/urp/newtcp/ A number of software tools and technical reports related to experimental TCP research in general are available respectively at: http://caia.swin.edu.au/urp/newtcp/tools.html http://caia.swin.edu.au/urp/newtcp/papers.html The majority of these tools have now been incorporated into FreeBSD 9.x. At the time of writing, the following software tools may be of interest: Modular TCP Congestion Control for FreeBSD Khelp Framework for FreeBSD Enhanced RTT kernel helper module (h_ertt) Vegas congestion control module (cc_vegas) Hamilton probabilistic delay based congestion control module (cc_hd) CAIA-Hamilton probabilistic delay based congestion control module (cc_chd) CUBIC congestion control algorithm (cc_cubic) H-TCP congestion control algorithm (cc_htcp) ---------------------------------------------- REFERENCES ---------------------------------------------- [1] D. A. Hayes and G. Armitage, "Revisiting TCP congestion control using delay gradients", in IFIP/TC6 NETWORKING, Valencia, Spain May 2011. ---------------------------------------------- AUTHOR ---------------------------------------------- The CDG TCP congestion control module was developed by David Hayes.