Is there a way I can run a different (than the default) TCP congestion control algorithm in FreeBSD? I am trying to modify an existing TCP congestion control algorithm with some ideas published in research papers to try to get better performance over Wireless networks.
You can see which TCP congestion control algorithms are available by looking at the
net.inet.tcp.cc.available sysctl. By default, only newreno is available, so it is the one that is used. There are several different algorithms available, look for modules named
You can load them via kldload, such as
kldload cc_vegas. After you do that, the new algorithm will show up in
net.inet.tcp.cc.available. You can select it via the
Here's a complete example:
% sysctl -a | grep net.inet.tcp.cc net.inet.tcp.cc.available: newreno net.inet.tcp.cc.algorithm: newreno % sudo kldload cc_vegas % sysctl -a | grep net.inet.tcp.cc net.inet.tcp.cc.vegas.beta: 3 net.inet.tcp.cc.vegas.alpha: 1 net.inet.tcp.cc.available: newreno, vegas net.inet.tcp.cc.algorithm: newreno % sudo sysctl net.inet.tcp.cc.algorithm=vegas net.inet.tcp.cc.algorithm: newreno -> vegas % sudo sysctl net.inet.tcp.cc.algorithm=newreno net.inet.tcp.cc.algorithm: vegas -> newreno %
So far as research, there's a couple of projects managed at the Centre for Advanced Internet Architectures (CAIA) at the University of Swinburne. They've been focusing at least partly about delay-based algorithms in FreeBSD[newtcp]. Together with the support of the FreeBSD foundation, the newtcp project's work has been integrated with FreeBSD 9.0 and subsequent releases.
In broader UNIX applications, personally I've seen some success with Westwood+ TCP congestion control, on Linux. Westwood may be particularly useful in wireless applications [Casetti2002]. I've also found a nice article about one TCP-FIT [Wang2011]
Personally, I'm relatively new to the FreeBSD platform. I would estimate that for any immediate applications in wireless networking, CAIA's work in delay-based TCP congestion control might be of some particular interest.
Endeavoring to extend of Steve Wills' response, in addition to there being the present availability of TCP congestion control algorithms in any single installation of a FreeBSD kernel, the FreeBSD Handbook includes instructions about rebuilding the FreeBSD kernel. [Handbook Ch 9.]
Conjecturally, with a build environment using Pourdriere for package build automation, and a LAN networks' PXE/Netboot services (BootP, DHCP, etc), it may be possible to build a relatively comfortable benchmarking environment for applications of the available TCP congestion control algorithms, on differing platforms and in differing network configurations. Furthermore, conjecturally, perhaps there may be some existing work as towards simulating radio channel noise and other wireless channel interference, as towards estimating system performance under real-world configurations. Personally, I'm afraid that the University I'm attending online does not have a lab quite equipped for this manner of research, but I'm certain that it must be possible somewhere in academia.
Here is the short bibliography:
These articles may be available directly from their respective publishers, and may be available in pre-print editions from the respective granting institutions.