netdev
[Top] [All Lists]

Re: bad TSO performance in 2.6.9-rc2-BK

To: "David S. Miller" <davem@xxxxxxxxxxxxx>
Subject: Re: bad TSO performance in 2.6.9-rc2-BK
From: John Heffner <jheffner@xxxxxxx>
Date: Mon, 27 Sep 2004 18:38:42 -0400 (EDT)
Cc: Andi Kleen <ak@xxxxxxx>, <niv@xxxxxxxxxx>, <andy.grover@xxxxxxxxx>, <anton@xxxxxxxxx>, <netdev@xxxxxxxxxxx>
In-reply-to: <20040923161141.4ea9be4c.davem@xxxxxxxxxxxxx>
Sender: netdev-bounce@xxxxxxxxxxx
On Thu, 23 Sep 2004, David S. Miller wrote:

>
> I think I know what may be going on here.
>
> Let's say that we even get the congestion window openned up
> so that we can build 64K TSO frames, that's around 43 or 44
> 1500 mtu frames.
>
> That means as the window fills up, we have to see 44 ACKs
> before we are able to send the next TSO frame.  Needless to
> say that breaks ACK clocking completely.


More specifically, I think it is an interaction with delayed ack (acking
less than 1 virtual segment), and the small cwnd.  This works for me, but
I'm not sure that aren't some lurking problems still.

===== net/ipv4/tcp_output.c 1.58 vs edited =====
--- 1.58/net/ipv4/tcp_output.c  2004-09-14 00:39:17 -04:00
+++ edited/net/ipv4/tcp_output.c        2004-09-27 18:26:43 -04:00
@@ -642,8 +657,8 @@
                 * do not exceed congestion window.
                 */
                factor = large_mss / mss_now;
-               if (factor > tp->snd_cwnd)
-                       factor = tp->snd_cwnd;
+               if (factor > (tp->snd_cwnd>>3))
+                       factor = max(tp->snd_cwnd>>3, 1);

                tp->mss_cache = mss_now * factor;
        }

  -John


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