netdev
[Top] [All Lists]

[PATCH] TCP BIC not binary searching correctly

To: "David S. Miller" <davem@xxxxxxxxxxxxx>
Subject: [PATCH] TCP BIC not binary searching correctly
From: Stephen Hemminger <shemminger@xxxxxxxx>
Date: Fri, 18 Mar 2005 13:57:13 -0800
Cc: Injong Rhee <rhee@xxxxxxxxxxxx>, netdev@xxxxxxxxxxx
Organization: Open Source Development Lab
Sender: netdev-bounce@xxxxxxxxxxx
While redoing BIC for the split up version, I discovered that the existing
2.6.11 code doesn't really do binary search. It ends up being just a slightly
modified version of Reno.  See attached graphs to see the effect over simulated
1mbit environment.

The problem is that BIC is supposed to reset the cwnd to the last loss value
rather than ssthresh when loss is detected.  The correct code (from the BIC
TCP code for Web100) is in this patch.

Signed-off-by: Stephen Hemminger <shemminger@xxxxxxxx>


diff -Nru a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
--- a/net/ipv4/tcp_input.c      2005-03-18 13:53:52 -08:00
+++ b/net/ipv4/tcp_input.c      2005-03-18 13:53:53 -08:00
@@ -1654,7 +1654,10 @@
 static void tcp_undo_cwr(struct tcp_sock *tp, int undo)
 {
        if (tp->prior_ssthresh) {
-               tp->snd_cwnd = max(tp->snd_cwnd, tp->snd_ssthresh<<1);
+               if (tcp_is_bic(tp))
+                       tp->snd_cwnd = max(tp->snd_cwnd, 
tp->bictcp.last_max_cwnd);
+               else
+                       tp->snd_cwnd = max(tp->snd_cwnd, tp->snd_ssthresh<<1);
 
                if (undo && tp->prior_ssthresh > tp->snd_ssthresh) {
                        tp->snd_ssthresh = tp->prior_ssthresh;

Attachment: bic-bug.png
Description: PNG image

Attachment: bic-fix.png
Description: PNG image

<Prev in Thread] Current Thread [Next in Thread>