netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "David S. Miller" <davem@davemloft.net>
To: Rick Jones <rick.jones2@hp.com>
Cc: hubert.tonneau@fullpliant.org, shemminger@osdl.org,
	romieu@fr.zoreil.com, kuznet@ms2.inr.ac.ru, netdev@oss.sgi.com
Subject: Re: 2.6.10 TCP troubles -- suggested patch
Date: Thu, 10 Feb 2005 17:16:12 -0800	[thread overview]
Message-ID: <20050210171612.3bd2d8c6.davem@davemloft.net> (raw)
In-Reply-To: <420BE1F8.1080500@hp.com>

On Thu, 10 Feb 2005 14:36:40 -0800
Rick Jones <rick.jones2@hp.com> wrote:

> Hubert Tonneau wrote:
> > It does not seem to solve the problem:
> > . Linux 2.6.9 takes 15 seconds to copy 105 MB to the Mac OSX
> > . Linux 2.6.10 with the TCP patch still takes 325 seconds.
> 
> 
> is there a packet trace somewhere?

I know what's wrong, no trace needed, Stephen's patch misses
tcp_push_one() and similar.

He only added the PSH bit setting to tcp_write_xmit().

Hubert, try this patch instead.

===== net/ipv4/tcp_output.c 1.77 vs edited =====
--- 1.77/net/ipv4/tcp_output.c	2005-01-18 12:23:36 -08:00
+++ edited/net/ipv4/tcp_output.c	2005-02-10 16:42:42 -08:00
@@ -408,6 +408,16 @@
 		sk->sk_send_head = skb;
 }
 
+static inline void tcp_tso_set_push(struct sk_buff *skb)
+{
+	/* Force push to be on for any TSO frames to workaround
+	 * problems with busted implementations like Mac OS-X that
+	 * hold off socket reveive wakeups until push is seen.
+	 */
+	if (tcp_skb_pcount(skb) > 1)
+		TCP_SKB_CB(skb)->flags |= TCPCB_FLAG_PSH;
+}
+
 /* Send _single_ skb sitting at the send head. This function requires
  * true push pending frames to setup probe timer etc.
  */
@@ -419,6 +429,7 @@
 	if (tcp_snd_test(tp, skb, cur_mss, TCP_NAGLE_PUSH)) {
 		/* Send it out now. */
 		TCP_SKB_CB(skb)->when = tcp_time_stamp;
+		tcp_tso_set_push(skb);
 		if (!tcp_transmit_skb(sk, skb_clone(skb, sk->sk_allocation))) {
 			sk->sk_send_head = NULL;
 			tp->snd_nxt = TCP_SKB_CB(skb)->end_seq;
@@ -755,6 +766,7 @@
 			}
 
 			TCP_SKB_CB(skb)->when = tcp_time_stamp;
+			tcp_tso_set_push(skb);
 			if (tcp_transmit_skb(sk, skb_clone(skb, GFP_ATOMIC)))
 				break;
 
@@ -1096,6 +1108,7 @@
 	 * is still in somebody's hands, else make a clone.
 	 */
 	TCP_SKB_CB(skb)->when = tcp_time_stamp;
+	tcp_tso_set_push(skb);
 
 	err = tcp_transmit_skb(sk, (skb_cloned(skb) ?
 				    pskb_copy(skb, GFP_ATOMIC):
@@ -1668,6 +1681,7 @@
 
 			TCP_SKB_CB(skb)->flags |= TCPCB_FLAG_PSH;
 			TCP_SKB_CB(skb)->when = tcp_time_stamp;
+			tcp_tso_set_push(skb);
 			err = tcp_transmit_skb(sk, skb_clone(skb, GFP_ATOMIC));
 			if (!err) {
 				update_send_head(sk, tp, skb);

  reply	other threads:[~2005-02-11  1:16 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-02-10 21:53 2.6.10 TCP troubles -- suggested patch Hubert Tonneau
2005-02-10 22:36 ` Rick Jones
2005-02-11  1:16   ` David S. Miller [this message]
  -- strict thread matches above, loose matches on Subject: below --
2005-02-20 23:06 Hubert Tonneau
2005-02-16 20:00 Hubert Tonneau
2005-02-13 10:52 Hubert Tonneau
2005-02-14 14:12 ` Alexey Kuznetsov
2005-02-11 21:55 Hubert Tonneau
2005-02-11 22:54 ` Rick Jones
2005-02-11 23:09   ` Nivedita Singhvi
2005-02-11 23:40     ` Rick Jones
2005-02-12  1:08     ` David S. Miller
2005-02-12  1:09   ` David S. Miller
2005-02-12 14:31     ` Alexey Kuznetsov
2005-02-12 19:28       ` David S. Miller
2005-02-12 19:44         ` Leonid Grossman
2005-02-12 19:52         ` Alexey Kuznetsov
2005-02-15 23:25           ` David S. Miller
2005-02-12 20:19       ` rick jones
2005-02-12 20:28         ` David S. Miller
2005-02-12 20:56         ` Alexey Kuznetsov
2005-02-12 21:27           ` Nivedita Singhvi
2005-02-12 21:43           ` rick jones
2005-02-12 22:00             ` Alexey Kuznetsov
2005-02-13  1:29               ` rick jones
2005-02-11 23:04 ` Stephen Hemminger
2005-02-12  1:07   ` David S. Miller
2005-02-12 12:11     ` Andi Kleen
2005-02-12 19:23       ` David S. Miller
2005-02-12 21:30         ` Andi Kleen
2005-02-12 14:16     ` Alexey Kuznetsov
2005-02-12 19:41       ` David S. Miller
2005-02-12 20:03         ` Alexey Kuznetsov
2005-02-15 23:26           ` David S. Miller
2005-02-15 23:42             ` Rick Jones
2005-02-15 23:23   ` David S. Miller
2005-02-16  9:13     ` Alexey Kuznetsov
2005-02-16 17:50       ` David S. Miller
     [not found] <050QTJA12@server5.heliogroup.fr>
2005-02-09 18:59 ` Stephen Hemminger
2005-02-09 20:25   ` David S. Miller

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=20050210171612.3bd2d8c6.davem@davemloft.net \
    --to=davem@davemloft.net \
    --cc=hubert.tonneau@fullpliant.org \
    --cc=kuznet@ms2.inr.ac.ru \
    --cc=netdev@oss.sgi.com \
    --cc=rick.jones2@hp.com \
    --cc=romieu@fr.zoreil.com \
    --cc=shemminger@osdl.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).