CC_HD(4)

๐Ÿ’– cc_hd โ€” HD Congestion Control Algorithm ๐Ÿ’–

okay bestie, welcome to the cc_hd(4) page from the Kernel Interfaces Manual โ€” yes we're reading kernel docs together, this is our bonding era ๐Ÿซถ


โœจ NAME โœจ

cc_hd โ€” the HD Congestion Control Algorithm, no cap ๐Ÿ’…


๐ŸŒธ DESCRIPTION ๐ŸŒธ

So. The HD congestion control algorithm is an implementation of the Hamilton Institute's delay-based congestion control, and its whole personality is: keep network queuing delays below a particular threshold (queue_threshold). That's the dream, that's the goal, that's the vibe check it's constantly running on your packets ๐Ÿ“‰โœจ

HD probabilistically reduces the congestion window (cwnd) based on its estimate of the network queuing delay. And the way the probability works is so specific, okay, listen:

  • the probability of reducing cwnd is zero at hd_qmin or less ๐Ÿ”ป
  • it rises to a maximum at queue_threshold ๐Ÿ“ˆ
  • and then it drops back down to zero at the maximum queuing delay ๐Ÿ”ป

It's giving a little hill of chaos. Iconic behaviour honestly.

Now, loss-based congestion control algorithms like NewReno probe for network capacity by literally filling queues until there's a packet loss ๐Ÿ˜ญ (not them just brute-forcing it). HD competes with those loss-based algorithms by letting its probability of reducing cwnd drop from a maximum at queue_threshold to zero at the maximum queuing delay. And this has been shown to work well when the bottleneck link is highly multiplexed. slay ๐ŸŒˆ

๐ŸŽ€ MIB Variables ๐ŸŽ€

The algorithm exposes the following tunable variables in the net.inet.tcp.cc.hd branch of the sysctl(3) MIB:

  • queue_threshold โ€” Queueing congestion threshold (qth) in ticks. Default is 20. ๐Ÿ‘‘
  • pmax โ€” Per packet maximum backoff probability as a percentage. Default is 5. ๐Ÿ”ฅ
  • qmin โ€” Minimum queuing delay threshold (qmin) in ticks. Default is 5. ๐Ÿ’œ

๐Ÿฆ‹ SEE ALSO ๐Ÿฆ‹

and also this academic baddie:

  • 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., 7, 13, 555-557, Jul 2009. ๐Ÿ“šโœจ

๐Ÿ’– ACKNOWLEDGEMENTS ๐Ÿ’–

Development and testing of this software were made possible in part by grants from the FreeBSD Foundation and the Cisco University Research Program Fund at Community Foundation Silicon Valley. we love funding, we love research, we love it here ๐Ÿซถ


๐Ÿ”ฎ FUTURE WORK ๐Ÿ”ฎ

Plot twist bestie: the Hamilton Institute have recently made some improvements to the algorithm implemented by this module and have called it Coexistent-TCP (C-TCP). The improvements should be evaluated and potentially incorporated into this module. so likeโ€ฆ TBD, watch this space ๐Ÿ‘€


๐Ÿ“œ HISTORY ๐Ÿ“œ

The cc_hd congestion control module first appeared in FreeBSD 9.0.

The module was first released in 2010 by David Hayes whilst working on the NewTCP research project at Swinburne University of Technology's Centre for Advanced Internet Architectures, Melbourne, Australia. More details are available at:

http://caia.swin.edu.au/urp/newtcp/

๐Ÿ‘‘ AUTHORS ๐Ÿ‘‘

The cc_hd congestion control module and this manual page were written by David Hayes <david.hayes@ieee.org>. ๐Ÿ’Œ


and that's the whole page, bestie โ€” every flag, every default, every reference, nothing skipped, periodt ๐Ÿ’…โœจ

this one came from the Debian edition, dated September 15, 2011 โ€” shoutout to the CC_HD(4) footer for keeping it real all these years ๐ŸŽ€๐Ÿฆ‹

๐Ÿ“ฆ where this page comes from