Centre for Advanced Internet Architectures, Swinburne University of Technology, Melbourne, Australia CRICOS number 00111D 30th July, 2010 ---------------------------------------------- OVERVIEW ---------------------------------------------- The Hamilton Delay (cc_hd) module is an experimental delay based congestion control algorithm proposed by L. Budzisz et al.[1] at the Hamilton Institute, University of Ireland, Maynooth. It is a first step toward the ability of delay based algorithms to fairly coexist with loss based algorithms. This algorithm is only suitable for experimental use in its current form, but illustrates many of the benifits of delay based congestion control algorithms, providing a step toward coexistence with loss based congestion control algorithms. Cc_hd 0.2 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 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_hd.ko (Note: cc_hd requires h_ertt) To unload the module from the running kernel, run the following as root: kldunload cc_hd 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_hd has 3 sysctl parameters which can be set: net.inet.tcp.cc.hd.queue_min (default 5) Minimum queueing delay threshold in ticks. Algorithm operates when inferred queueing delay is above this threshold. net.inet.tcp.cc.hd.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.hd.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.algorithm (newreno) Default congestion control algorithm. It needs to be set to "hd" for the cc_hd algorithm to be used as the default. ---------------------------------------------- KNOWN LIMITATIONS ---------------------------------------------- Current known limitations of the cc_hd 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) Vegas congestion control module (cc_vegas) CUBIC congestion control algorithm (cc_cubic) H-TCP congestion control algorithm (cc_htcp) CAIA-Hamilton Delay congestion control algorithm (cc_chd) ---------------------------------------------- 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. Hayes, "Timing enhancements to the FreeBSD kernel to support delay and rate based TCP mechanisms", CAIA Technical Report 100217A, February 2010. [3] 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.