Hi gurus, I am testing tcp_vegas.c in Linux with the NS-2 TCP-Linux. It seems that the ssthresh is not correctly reset to 2 in the "tcp_vegas_cong_avoid" function. The problem might lead to very unfair behavior among Vegas flows, when some flows exit slow start due to loss, not delay.
Please see the detailed effect at: http://www.cs.caltech.edu/%7Eweixl/technical/ns2linux/known_linux/#vegas (the section of "Setting of Slow-Start-Threshold") A patch I wrote (for Linux 2.6.19-2) is attached. Basically, the branch that sets ssthresh to be 2 should be outside the condition of (cwnd<=ssthresh). --- tcp_vegas.c.old 2007-02-01 00:33:55.000000000 -0800 +++ tcp_vegas.c 2007-02-01 00:39:49.000000000 -0800 @@ -265,26 +265,25 @@ */ diff = (old_wnd << V_PARAM_SHIFT) - target_cwnd; - if (tp->snd_cwnd <= tp->snd_ssthresh) { - /* Slow start. */ - if (diff > gamma) { - /* Going too fast. Time to slow down - * and switch to congestion avoidance. - */ - tp->snd_ssthresh = 2; + if (diff > gamma && tp->snd_ssthresh > 2 ) { + /* Going too fast. Time to slow down + * and switch to congestion avoidance. + */ + tp->snd_ssthresh = 2; - /* Set cwnd to match the actual rate - * exactly: - * cwnd = (actual rate) * baseRTT - * Then we add 1 because the integer - * truncation robs us of full link - * utilization. - */ - tp->snd_cwnd = min(tp->snd_cwnd, - (target_cwnd >> - V_PARAM_SHIFT)+1); + /* Set cwnd to match the actual rate + * exactly: + * cwnd = (actual rate) * baseRTT + * Then we add 1 because the integer + * truncation robs us of full link + * utilization. + */ + tp->snd_cwnd = min(tp->snd_cwnd, + (target_cwnd >> + V_PARAM_SHIFT)+1); - } + } else if (tp->snd_cwnd <= tp->snd_ssthresh) { + /* Slow start. */ tcp_slow_start(tp); } else { /* Congestion avoidance. */ Thanks. -David -- Xiaoliang (David) Wei Graduate Student, [EMAIL PROTECTED] http://davidwei.org *********************************************** - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html