TCP congestion avoidance
Chuck Swiger
cswiger at mac.com
Thu Feb 26 13:27:31 PST 2009
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 at linuxpro.co.za>
> Date: Thu, Feb 26, 2009 at 10:13 AM
> Subject: TCP congestion avoidance
> To: freebsd-questions at 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
More information about the freebsd-questions
mailing list