Centre for Advanced Internet Architectures, Swinburne University of Technology, Melbourne, Australia CRICOS number 00111D 30th July, 2010 ---------------------------------------------- OVERVIEW ---------------------------------------------- The CAIA-Hamilton Delay (cc_chd) module is an experimental delay based congestion control algorithm which enhances the algorithm proposed by L. Budzisz et al.[1] at the Hamilton Institute, University of Ireland, Maynooth. In Hayes and Armitage[2] a description of basic CHD is given, along with some experimental analysis comparing it with our implementation of HD (see [1]). Cc_chd 0.1 requires the bundled version of the Modular TCP Congestion control v0.10.0 and Helper Framework v0.1.1 patch to be applied to the kernel before it can be used. If a system that has previously been patched with either the Modular TCP Congestion control or the Helper Framework patch, these should be removed first, and the bundled patch applied. The bundled patch is available under the Modular TCP Congestion Control or Helper Framework items at: http://caia.swin.edu.au/urp/newtcp/tools/caia_modularcc_v0.10.0_helper_v0.1.1_bundle_9.x.r209905.patch ---------------------------------------------- LICENCE ---------------------------------------------- The FreeBSD cc_hd module is released under a BSD licence. Refer to licence headers in each source file for further details. ---------------------------------------------- USAGE ---------------------------------------------- Make sure you have the FreeBSD system sources. These can be installed using sysinstall if they are not currently installed. The running system must have caia_modularcc_v0.10.0_helper_v0.1.1_bundle_9.x.r209905.patch applied. To build the module, simply run: make HERTT_DIR=/path/to/h_ertt-0.2 setting HERTT_DIR to the directory path containing the "h_ertt.h" file. To load the compiled module into the running kernel, run the following command as root: kldload ./cc_chd.ko (Note: cc_chd requires h_ertt) To unload the module from the running kernel, run the following as root: kldunload cc_chd To delete all artifacts created by compiling the module, run: make cleandir ---------------------------------------------- COMPILE TIME CONFIGURATION ---------------------------------------------- There are currently no compile-time configuration options. ---------------------------------------------- RUN TIME CONFIGURATION ---------------------------------------------- cc_chd has a number of sysctl parameters which can be set: net.inet.tcp.cc.chd.queue_min (default 5) Minimum queueing delay threshold in ticks. Algorithm operates when inferred queueing delay is above this threshold. net.inet.tcp.cc.chd.queue_threshold (default 20) Queueing congestion threshold in ticks. When there are no loss based flows, the algorithm seeks to keep the queueing delay between queue_min and queue_threshold. net.inet.tcp.cc.chd.pmax (default 5) Per packet maximum backoff probability as a percentage. The probabilistic backoff mechanism helps aid coexistence with loss based flows. net.inet.tcp.cc.chd.loss_fair (default 1) Implements the shadow window mechanism to aid fair coexistence with loss based flows. If 0, the shadow window mechanism is turned off. net.inet.tcp.cc.chd.use_max (default 1) Uses the maximum RTT measured in a given RTT measurement period as the congestion signal. If 0, CHD uses the current RTT sample. net.inet.tcp.cc.algorithm (newreno) Default congestion control algorithm. It needs to be set to "chd" for the cc_chd algorithm to be used as the default. ---------------------------------------------- KNOWN LIMITATIONS ---------------------------------------------- Current known limitations of the cc_chd software: 1. Requires manual settings of delay thresholds. ---------------------------------------------- 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 At the time of writing, the following software tools may be of interest: Modular TCP Congestion Control for FreeBSD Helper Framework for FreeBSD Enhanced timing helper module (h_ertt) TCP Vegas congestion control module (cc_vegas) CUBIC Congestion Control Algorithm (cc_cubic) H-TCP Congestion Control Algorithm (cc_htcp) HD Congestion Control Algorithm (cc_hd) ---------------------------------------------- REFERENCES ---------------------------------------------- [1] L. Budzisz, R. Stanojevic, R. Shorten, and F. Baker, “A strategy for fair coexistence of loss and delay-based congestion control algorithms,” IEEE Commun. Lett., vol. 13, no. 7, pp. 555–557, Jul. 2009. [2] D. A. Hayes and G. Armitage, "Improved coexistence and loss tolerance for delay based TCP congestion control", in Proceedings of 35th Annual IEEE Conference on Local Computer Networks (LCN 2010), Denver, Colorado, USA, 11-14 October 2010. [3] D. Hayes, "Timing enhancements to the FreeBSD kernel to support delay and rate based TCP mechanisms", CAIA Technical Report 100217A, February 2010. [4] L. Stewart, J. Healy, "Light-Weight Modular TCP Congestion Control for FreeBSD 7", CAIA Technical Report 071218A, December 2007. ---------------------------------------------- AUTHORS ---------------------------------------------- The experimental Hamilton delay congestion control module was developed by David Hayes using the Modular Congestion Control Framework and Helper Framework for FreeBSD developed by Lawrence Stewart.