Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 28 Oct 2012 19:47:46 +0000 (UTC)
From:      Andre Oppermann <andre@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r242266 - head/sys/netinet
Message-ID:  <201210281947.q9SJlku2085767@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: andre
Date: Sun Oct 28 19:47:46 2012
New Revision: 242266
URL: http://svn.freebsd.org/changeset/base/242266

Log:
  Increase the initial CWND to 10 segments as defined in IETF TCPM
  draft-ietf-tcpm-initcwnd-05. It explains why the increased initial
  window improves the overall performance of many web services without
  risking congestion collapse.
  
  As long as it remains a draft it is placed under a sysctl marking it
  as experimental:
   net.inet.tcp.experimental.initcwnd10 = 1
  When it becomes an official RFC soon the sysctl will be changed to
  the RFC number and moved to net.inet.tcp.
  
  This implementation differs from the RFC draft in that it is a bit
  more conservative in the case of packet loss on SYN or SYN|ACK because
  we haven't reduced the default RTO to 1 second yet.  Also the restart
  window isn't yet increased as allowed.  Both will be adjusted with
  upcoming changes.
  
  Is is enabled by default.  In Linux it is enabled since kernel 3.0.
  
  MFC after:	2 weeks

Modified:
  head/sys/netinet/tcp_input.c
  head/sys/netinet/tcp_var.h

Modified: head/sys/netinet/tcp_input.c
==============================================================================
--- head/sys/netinet/tcp_input.c	Sun Oct 28 19:38:42 2012	(r242265)
+++ head/sys/netinet/tcp_input.c	Sun Oct 28 19:47:46 2012	(r242266)
@@ -159,6 +159,14 @@ SYSCTL_VNET_INT(_net_inet_tcp, OID_AUTO,
     &VNET_NAME(tcp_do_rfc3390), 0,
     "Enable RFC 3390 (Increasing TCP's Initial Congestion Window)");
 
+SYSCTL_NODE(_net_inet_tcp, OID_AUTO, experimental, CTLFLAG_RW, 0,
+    "Experimental TCP extensions");
+
+VNET_DEFINE(int, tcp_do_initcwnd10) = 1;
+SYSCTL_VNET_INT(_net_inet_tcp_experimental, OID_AUTO, initcwnd10, CTLFLAG_RW,
+    &VNET_NAME(tcp_do_initcwnd10), 0,
+    "Enable draft-ietf-tcpm-initcwnd-05 (Increasing initial CWND to 10)");
+
 VNET_DEFINE(int, tcp_do_rfc3465) = 1;
 SYSCTL_VNET_INT(_net_inet_tcp, OID_AUTO, rfc3465, CTLFLAG_RW,
     &VNET_NAME(tcp_do_rfc3465), 0,
@@ -347,6 +355,7 @@ cc_conn_init(struct tcpcb *tp)
 	 *
 	 * RFC5681 Section 3.1 specifies the default conservative values.
 	 * RFC3390 specifies slightly more aggressive values.
+	 * Draft-ietf-tcpm-initcwnd-05 increases it to ten segments.
 	 *
 	 * If a SYN or SYN/ACK was lost and retransmitted, we have to
 	 * reduce the initial CWND to one segment as congestion is likely
@@ -354,6 +363,9 @@ cc_conn_init(struct tcpcb *tp)
 	 */
 	if (tp->snd_cwnd == 1)
 		tp->snd_cwnd = tp->t_maxseg;		/* SYN(-ACK) lost */
+	else if (V_tcp_do_initcwnd10)
+		tp->snd_cwnd = min(10 * tp->t_maxseg,
+		    max(2 * tp->t_maxseg, 14600));
 	else if (V_tcp_do_rfc3390)
 		tp->snd_cwnd = min(4 * tp->t_maxseg,
 		    max(2 * tp->t_maxseg, 4380));

Modified: head/sys/netinet/tcp_var.h
==============================================================================
--- head/sys/netinet/tcp_var.h	Sun Oct 28 19:38:42 2012	(r242265)
+++ head/sys/netinet/tcp_var.h	Sun Oct 28 19:47:46 2012	(r242266)
@@ -611,6 +611,7 @@ VNET_DECLARE(int, tcp_mssdflt);	/* XXX *
 VNET_DECLARE(int, tcp_minmss);
 VNET_DECLARE(int, tcp_delack_enabled);
 VNET_DECLARE(int, tcp_do_rfc3390);
+VNET_DECLARE(int, tcp_do_initcwnd10);
 VNET_DECLARE(int, tcp_sendspace);
 VNET_DECLARE(int, tcp_recvspace);
 VNET_DECLARE(int, path_mtu_discovery);
@@ -623,6 +624,7 @@ VNET_DECLARE(int, tcp_abc_l_var);
 #define	V_tcp_minmss		VNET(tcp_minmss)
 #define	V_tcp_delack_enabled	VNET(tcp_delack_enabled)
 #define	V_tcp_do_rfc3390	VNET(tcp_do_rfc3390)
+#define	V_tcp_do_initcwnd10	VNET(tcp_do_initcwnd10)
 #define	V_tcp_sendspace		VNET(tcp_sendspace)
 #define	V_tcp_recvspace		VNET(tcp_recvspace)
 #define	V_path_mtu_discovery	VNET(path_mtu_discovery)



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201210281947.q9SJlku2085767>