Thread (3 messages) flat view 3 messages, 2 authors, 2004-06-11
STALE8092d

[PATCH] unclamp tcp receive window if doing dynamic receive sizing

From: Stephen Hemminger <hidden>
Date: 2004-06-07 20:30:56

When running tests over higher speed links, the new 2.6 Dynamic Receiver Sizing
code doesn't increase the window large enough.  The problem is that the window
clamp restricts the allowed window to the socket receive buffer size (85k)

Easiest fix is to not restrict window clamp if we want to dynamic receiver stuff.
This is what web100 did.

Thanks to John Heffner for finding this.

Signed-off-by: Stephen Hemminger <redacted>
 
diff -Nru a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
--- a/net/ipv4/tcp_input.c	2004-06-07 12:45:49 -07:00
+++ b/net/ipv4/tcp_input.c	2004-06-07 12:45:49 -07:00
@@ -300,7 +300,6 @@
 static void tcp_init_buffer_space(struct sock *sk)
 {
 	struct tcp_opt *tp = tcp_sk(sk);
-	int maxwin;
 
 	if (!(sk->sk_userlocks & SOCK_RCVBUF_LOCK))
 		tcp_fixup_rcvbuf(sk);
@@ -309,22 +308,24 @@
 
 	tp->rcvq_space.space = tp->rcv_wnd;
 
-	maxwin = tcp_full_space(sk);
+	if (!sysctl_tcp_moderate_rcvbuf) {
+		int maxwin = tcp_full_space(sk);
 
-	if (tp->window_clamp >= maxwin) {
-		tp->window_clamp = maxwin;
+		if (tp->window_clamp >= maxwin) {
+			tp->window_clamp = maxwin;
 
-		if (sysctl_tcp_app_win && maxwin > 4 * tp->advmss)
-			tp->window_clamp = max(maxwin -
-					       (maxwin >> sysctl_tcp_app_win),
-					       4 * tp->advmss);
+			if (sysctl_tcp_app_win && maxwin > 4 * tp->advmss)
+				tp->window_clamp = max(maxwin -
+						       (maxwin >> sysctl_tcp_app_win),
+						       4 * tp->advmss);
+		}
+
+		/* Force reservation of one segment. */
+		if (sysctl_tcp_app_win &&
+		    tp->window_clamp > 2 * tp->advmss &&
+		    tp->window_clamp + tp->advmss > maxwin)
+			tp->window_clamp = max(2 * tp->advmss, maxwin - tp->advmss);
 	}
-
-	/* Force reservation of one segment. */
-	if (sysctl_tcp_app_win &&
-	    tp->window_clamp > 2 * tp->advmss &&
-	    tp->window_clamp + tp->advmss > maxwin)
-		tp->window_clamp = max(2 * tp->advmss, maxwin - tp->advmss);
 
 	tp->rcv_ssthresh = min(tp->rcv_ssthresh, tp->window_clamp);
 	tp->snd_cwnd_stamp = tcp_time_stamp;
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help