Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 26 Feb 2009 13:27:29 -0800
From:      Chuck Swiger <cswiger@mac.com>
To:        ross.cameron@linuxpro.co.za
Cc:        "freebsd-questions@freebsd.org" <freebsd-questions@freebsd.org>
Subject:   Re: TCP congestion avoidance
Message-ID:  <DBF0A23A-034B-44C3-993E-FB50A196704E@mac.com>
In-Reply-To: <35f70db10902261302y41d6e9e0x9f420dd6f589735b@mail.gmail.com>
References:  <35f70db10902260013v25e3f1bfs8f5929d2c62805@mail.gmail.com> <35f70db10902261302y41d6e9e0x9f420dd6f589735b@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Feb 26, 2009, at 1:02 PM, Ross Cameron wrote:
> Bump,...      Sorry guys (semi-urgent question and I really need the  
> help im
> not a fBSD guru)

As a suggestion, you ought to give the FreeBSD mailing lists at least  
a few hours, or better yet a day or so, before repeating a question  
due to lack of initial response.

> ---------- Forwarded message ----------
> From: Ross Cameron <ross.cameron@linuxpro.co.za>
> Date: Thu, Feb 26, 2009 at 10:13 AM
> Subject: TCP congestion avoidance
> To: freebsd-questions@freebsd.org
>
> Hi there all
>
> I spend most of my time maintaining an embedded Linux appliance for  
> a client
> of mine.  One of the features of this client is that depending on  
> connectivity types
> etc. if has the ability to choose between several different TCP  
> congestion
> avoidance algorythms.
>
> Now I have been approached by another client to produce a BSD  
> derived system
> (they're GPL alergic) and I would like to impliment a simmilar  
> feature on
> this new toolchain.
> Where can I find out what congestion avoidance algorythms FreeBSD  
> supports
> and how to plug them in and out during runtime (not at boot) ???

You should start with the output of "sysctl -ad net", in particular:

net.inet.tcp.slowstart_flightsize: Slow start flight size
net.inet.tcp.local_slowstart_flightsize: Slow start flight size for  
local networks
net.inet.tcp.newreno: Enable NewReno Algorithms
net.inet.tcp.delayed_ack: Delay ACK to try and piggyback it onto a  
data packet
net.inet.tcp.rfc3042: Enable RFC 3042 (Limited Transmit)
net.inet.tcp.rfc3390: Enable RFC 3390 (Increasing TCP's Initial  
Congestion Window)
net.inet.tcp.sack.enable: Enable/Disable TCP SACK support
net.inet.tcp.sack.maxholes: Maximum number of TCP SACK holes allowed  
per connection
net.inet.tcp.sack.globalmaxholes: Global maximum number of TCP SACK  
holes
net.inet.tcp.sack.globalholes: Global number of TCP SACK holes  
currently allocated
net.inet.tcp.inflight.enable: Enable automatic TCP inflight data  
limiting
net.inet.tcp.inflight.debug: Debug TCP inflight calculations
net.inet.tcp.inflight.rttthresh: RTT threshold below which inflight  
will deactivate itself
net.inet.tcp.inflight.min: Lower-bound for TCP inflight window
net.inet.tcp.inflight.max: Upper-bound for TCP inflight window
net.inet.tcp.inflight.stab: Inflight Algorithm Stabilization 20 = 2  
packets

These can be adjusted at runtime or even via setsockopt() for a few  
cases like TCP_NODELAY.  You might also find that the packet shaper  
capabilities of dummynet might be helpful for prioritizing traffic and  
managing odd links (ie, with a high bandwidth * delay cross product).

Beyond that, look into the source code such as /usr/src/sys/netinet/ 
tcp_output.c, netinet/tcp_sack.c, etc...

Regards,
-- 
-Chuck




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?DBF0A23A-034B-44C3-993E-FB50A196704E>