netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Xiaoliang (David) Wei" <davidwei79@gmail.com>
To: netdev@vger.kernel.org
Subject: A potential bug in tcp_vegas.c
Date: Thu, 1 Feb 2007 13:03:49 -0800	[thread overview]
Message-ID: <7335583a0702011303y5f3565d1r70a79eae94db6348@mail.gmail.com> (raw)

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, CS@Caltech
http://davidwei.org
***********************************************

             reply	other threads:[~2007-02-01 21:03 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-02-01 21:03 Xiaoliang (David) Wei [this message]
2007-02-09  0:08 ` A potential bug in tcp_vegas.c David Miller
  -- strict thread matches above, loose matches on Subject: below --
2007-02-01  9:45 Xiaoliang (David) Wei

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=7335583a0702011303y5f3565d1r70a79eae94db6348@mail.gmail.com \
    --to=davidwei79@gmail.com \
    --cc=netdev@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).