svn commit: r232345 - user/andre/tcp_workqueue/sys/netinet
Andre Oppermann
andre at FreeBSD.org
Thu Mar 1 16:18:40 UTC 2012
Author: andre
Date: Thu Mar 1 16:18:39 2012
New Revision: 232345
URL: http://svn.freebsd.org/changeset/base/232345
Log:
Increase the initial CWND to 10 segments as defined in IETF TCPM
draft-ietf-tcpm-initcwnd-03 discussing why the higher initial window
improves the overall performance of many web services without risking
congestion collapse.
As long as it remains a draft it is not enabled by default and placed
under a sysctl marking it clearly as experimental:
net.inet.tcp.exprimental.initcwnd10
Linux as of kernel 3.0 has enabled it by default.
Modified:
user/andre/tcp_workqueue/sys/netinet/tcp_input.c
user/andre/tcp_workqueue/sys/netinet/tcp_var.h
Modified: user/andre/tcp_workqueue/sys/netinet/tcp_input.c
==============================================================================
--- user/andre/tcp_workqueue/sys/netinet/tcp_input.c Thu Mar 1 16:04:25 2012 (r232344)
+++ user/andre/tcp_workqueue/sys/netinet/tcp_input.c Thu Mar 1 16:18:39 2012 (r232345)
@@ -155,6 +155,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) = 0;
+SYSCTL_VNET_INT(_net_inet_tcp_experimental, OID_AUTO, initcwnd10, CTLFLAG_RW,
+ &VNET_NAME(tcp_do_initcwnd10), 0,
+ "Enable draft-ietf-tcpm-initcwnd-03 (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,
@@ -343,6 +351,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-03 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
@@ -350,6 +359,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: user/andre/tcp_workqueue/sys/netinet/tcp_var.h
==============================================================================
--- user/andre/tcp_workqueue/sys/netinet/tcp_var.h Thu Mar 1 16:04:25 2012 (r232344)
+++ user/andre/tcp_workqueue/sys/netinet/tcp_var.h Thu Mar 1 16:18:39 2012 (r232345)
@@ -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)
More information about the svn-src-user
mailing list