forked from mirrors/linux
		
	[TCP]: Add tcp_slow_start_after_idle sysctl.
A lot of people have asked for a way to disable tcp_cwnd_restart(), and it seems reasonable to add a sysctl to do that. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									9e1881dec9
								
							
						
					
					
						commit
						35089bb203
					
				
					 5 changed files with 22 additions and 1 deletions
				
			
		|  | @ -362,6 +362,13 @@ tcp_workaround_signed_windows - BOOLEAN | |||
| 	not receive a window scaling option from them. | ||||
| 	Default: 0 | ||||
| 
 | ||||
| tcp_slow_start_after_idle - BOOLEAN | ||||
| 	If set, provide RFC2861 behavior and time out the congestion | ||||
| 	window after an idle period.  An idle period is defined at | ||||
| 	the current RTO.  If unset, the congestion window will not | ||||
| 	be timed out after an idle period. | ||||
| 	Default: 1 | ||||
| 
 | ||||
| IP Variables: | ||||
| 
 | ||||
| ip_local_port_range - 2 INTEGERS | ||||
|  |  | |||
|  | @ -405,6 +405,7 @@ enum | |||
| 	NET_TCP_BASE_MSS=114, | ||||
| 	NET_IPV4_TCP_WORKAROUND_SIGNED_WINDOWS=115, | ||||
| 	NET_TCP_DMA_COPYBREAK=116, | ||||
| 	NET_TCP_SLOW_START_AFTER_IDLE=117, | ||||
| }; | ||||
| 
 | ||||
| enum { | ||||
|  |  | |||
|  | @ -227,6 +227,7 @@ extern int sysctl_tcp_abc; | |||
| extern int sysctl_tcp_mtu_probing; | ||||
| extern int sysctl_tcp_base_mss; | ||||
| extern int sysctl_tcp_workaround_signed_windows; | ||||
| extern int sysctl_tcp_slow_start_after_idle; | ||||
| 
 | ||||
| extern atomic_t tcp_memory_allocated; | ||||
| extern atomic_t tcp_sockets_allocated; | ||||
|  |  | |||
|  | @ -690,6 +690,14 @@ ctl_table ipv4_table[] = { | |||
| 		.proc_handler	= &proc_dointvec | ||||
| 	}, | ||||
| #endif | ||||
| 	{ | ||||
| 		.ctl_name	= NET_TCP_SLOW_START_AFTER_IDLE, | ||||
| 		.procname	= "tcp_slow_start_after_idle", | ||||
| 		.data		= &sysctl_tcp_slow_start_after_idle, | ||||
| 		.maxlen		= sizeof(int), | ||||
| 		.mode		= 0644, | ||||
| 		.proc_handler	= &proc_dointvec | ||||
| 	}, | ||||
| 	{ .ctl_name = 0 } | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -59,6 +59,9 @@ int sysctl_tcp_tso_win_divisor = 3; | |||
| int sysctl_tcp_mtu_probing = 0; | ||||
| int sysctl_tcp_base_mss = 512; | ||||
| 
 | ||||
| /* By default, RFC2861 behavior.  */ | ||||
| int sysctl_tcp_slow_start_after_idle = 1; | ||||
| 
 | ||||
| static void update_send_head(struct sock *sk, struct tcp_sock *tp, | ||||
| 			     struct sk_buff *skb) | ||||
| { | ||||
|  | @ -138,7 +141,8 @@ static void tcp_event_data_sent(struct tcp_sock *tp, | |||
| 	struct inet_connection_sock *icsk = inet_csk(sk); | ||||
| 	const u32 now = tcp_time_stamp; | ||||
| 
 | ||||
| 	if (!tp->packets_out && (s32)(now - tp->lsndtime) > icsk->icsk_rto) | ||||
| 	if (sysctl_tcp_slow_start_after_idle && | ||||
| 	    (!tp->packets_out && (s32)(now - tp->lsndtime) > icsk->icsk_rto)) | ||||
| 		tcp_cwnd_restart(sk, __sk_dst_get(sk)); | ||||
| 
 | ||||
| 	tp->lsndtime = now; | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 David S. Miller
						David S. Miller