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>