Major performance hit with ToS setting

Lawrence Stewart lstewart at freebsd.org
Fri Jun 1 02:48:14 UTC 2012


On 05/31/12 13:33, Kevin Oberman wrote:
[snip]
> I used SIFTR at the suggestion of Lawrence Stewart who headed the
> project to bring plugable congestion algorithms to FreeBSD and found
> really odd congestion behavior. First, I do see a triple ACK, but the
> congestion window suddenly drops from 73K to 8K. If I understand
> CUBIC, it should half the congestion window, not what is happening..
> It then increases slowly (in slow start) to 82K. while the slow-start
> bytes are INCREASING, the congestion window again goes to 8K while the
> SS size moves from 36K up to 52K. It just continues to bound wildly
> between 8K (always the low point) and between 64k and 82K. The swings
> start at 83K and, over the first few seconds the peaks drop to about
> 64K.

Oh, and a comment about this behaviour. Dropping back to 8k (1MSS) is 
only nasty if the TF_{CONG|FAST}RECOVERY flags are *not* set i.e. if you 
see cwnd grow, drop to 8k with those flags set, and then when the flags 
are unset, cwnd starts at the value of ssthresh, then that is perfectly 
normal recovery behaviour. What *is* nasty is if an RTO fires, which 
will reset cwnd to 8k, ssthresh to 2*MSS and make the connection 
effectively start from scratch again.

There is evidence of RTOs in your siftr output, which is bad news e.g 
here's one example of 2 side-by-side log lines from your trace:

# Direction,time,ssthresh,cwnd,flags
i,1338319593.574706,27044,27044,1630544864
o,1338319593.831482,16384,8192,1092625377

Note the 300ms gap, and how cwnd resets to 1MSS and flags go from 
1630544864 
(TF_WASCRECOVERY|TF_CONGRECOVERY|TF_WASFRECOVERY|TF_FASTRECOVERY) to 
1092625377 (TF_WASCRECOVERY|TF_WASFRECOVERY).

Cheers,
Lawrence


More information about the freebsd-net mailing list