tcp_cubic: fix low utilization of CUBIC with HyStart
authorSangtae Ha <sangtae.ha@gmail.com>
Mon, 14 Mar 2011 07:52:18 +0000 (07:52 +0000)
committerDavid S. Miller <davem@davemloft.net>
Mon, 14 Mar 2011 22:54:42 +0000 (15:54 -0700)
HyStart sets the initial exit point of slow start.
Suppose that HyStart exits at 0.5BDP in a BDP network and no history exists.
If the BDP of a network is large, CUBIC's initial cwnd growth may be
too conservative to utilize the link.
CUBIC increases the cwnd 20% per RTT in this case.

Signed-off-by: Sangtae Ha <sangtae.ha@gmail.com>
Acked-by: Stephen Hemminger <shemminger@vyatta.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/tcp_cubic.c

index 7172c129ff19356826d0084dee11ffa70c269661..90d92dd4cf13c6ab05c944a51c795934ff88618a 100644 (file)
@@ -270,6 +270,13 @@ static inline void bictcp_update(struct bictcp *ca, u32 cwnd)
                ca->cnt = 100 * cwnd;              /* very small increment*/
        }
 
+       /*
+        * The initial growth of cubic function may be too conservative
+        * when the available bandwidth is still unknown.
+        */
+       if (ca->loss_cwnd == 0 && ca->cnt > 20)
+               ca->cnt = 20;   /* increase cwnd 5% per RTT */
+
        /* TCP Friendly */
        if (tcp_friendliness) {
                u32 scale = beta_scale;