forked from mirrors/linux
		
	tcp: add hrtimer slack to sack compression
Add a sysctl to control hrtimer slack, default of 100 usec. This gives the opportunity to reduce system overhead, and help very short RTT flows. Signed-off-by: Eric Dumazet <edumazet@google.com> Acked-by: Soheil Hassas Yeganeh <soheil@google.com> Acked-by: Neal Cardwell <ncardwell@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									ccd0628fca
								
							
						
					
					
						commit
						a70437cc09
					
				
					 5 changed files with 20 additions and 2 deletions
				
			
		|  | @ -651,6 +651,14 @@ tcp_comp_sack_delay_ns - LONG INTEGER | ||||||
| 
 | 
 | ||||||
| 	Default : 1,000,000 ns (1 ms) | 	Default : 1,000,000 ns (1 ms) | ||||||
| 
 | 
 | ||||||
|  | tcp_comp_sack_slack_ns - LONG INTEGER | ||||||
|  | 	This sysctl control the slack used when arming the | ||||||
|  | 	timer used by SACK compression. This gives extra time | ||||||
|  | 	for small RTT flows, and reduces system overhead by allowing | ||||||
|  | 	opportunistic reduction of timer interrupts. | ||||||
|  | 
 | ||||||
|  | 	Default : 100,000 ns (100 us) | ||||||
|  | 
 | ||||||
| tcp_comp_sack_nr - INTEGER | tcp_comp_sack_nr - INTEGER | ||||||
| 	Max number of SACK that can be compressed. | 	Max number of SACK that can be compressed. | ||||||
| 	Using 0 disables SACK compression. | 	Using 0 disables SACK compression. | ||||||
|  |  | ||||||
|  | @ -173,6 +173,7 @@ struct netns_ipv4 { | ||||||
| 	int sysctl_tcp_rmem[3]; | 	int sysctl_tcp_rmem[3]; | ||||||
| 	int sysctl_tcp_comp_sack_nr; | 	int sysctl_tcp_comp_sack_nr; | ||||||
| 	unsigned long sysctl_tcp_comp_sack_delay_ns; | 	unsigned long sysctl_tcp_comp_sack_delay_ns; | ||||||
|  | 	unsigned long sysctl_tcp_comp_sack_slack_ns; | ||||||
| 	struct inet_timewait_death_row tcp_death_row; | 	struct inet_timewait_death_row tcp_death_row; | ||||||
| 	int sysctl_max_syn_backlog; | 	int sysctl_max_syn_backlog; | ||||||
| 	int sysctl_tcp_fastopen; | 	int sysctl_tcp_fastopen; | ||||||
|  |  | ||||||
|  | @ -1329,6 +1329,13 @@ static struct ctl_table ipv4_net_table[] = { | ||||||
| 		.mode		= 0644, | 		.mode		= 0644, | ||||||
| 		.proc_handler	= proc_doulongvec_minmax, | 		.proc_handler	= proc_doulongvec_minmax, | ||||||
| 	}, | 	}, | ||||||
|  | 	{ | ||||||
|  | 		.procname	= "tcp_comp_sack_slack_ns", | ||||||
|  | 		.data		= &init_net.ipv4.sysctl_tcp_comp_sack_slack_ns, | ||||||
|  | 		.maxlen		= sizeof(unsigned long), | ||||||
|  | 		.mode		= 0644, | ||||||
|  | 		.proc_handler	= proc_doulongvec_minmax, | ||||||
|  | 	}, | ||||||
| 	{ | 	{ | ||||||
| 		.procname	= "tcp_comp_sack_nr", | 		.procname	= "tcp_comp_sack_nr", | ||||||
| 		.data		= &init_net.ipv4.sysctl_tcp_comp_sack_nr, | 		.data		= &init_net.ipv4.sysctl_tcp_comp_sack_nr, | ||||||
|  |  | ||||||
|  | @ -5324,8 +5324,9 @@ static void __tcp_ack_snd_check(struct sock *sk, int ofo_possible) | ||||||
| 	delay = min_t(unsigned long, sock_net(sk)->ipv4.sysctl_tcp_comp_sack_delay_ns, | 	delay = min_t(unsigned long, sock_net(sk)->ipv4.sysctl_tcp_comp_sack_delay_ns, | ||||||
| 		      rtt * (NSEC_PER_USEC >> 3)/20); | 		      rtt * (NSEC_PER_USEC >> 3)/20); | ||||||
| 	sock_hold(sk); | 	sock_hold(sk); | ||||||
| 	hrtimer_start(&tp->compressed_ack_timer, ns_to_ktime(delay), | 	hrtimer_start_range_ns(&tp->compressed_ack_timer, ns_to_ktime(delay), | ||||||
| 		      HRTIMER_MODE_REL_PINNED_SOFT); | 			       sock_net(sk)->ipv4.sysctl_tcp_comp_sack_slack_ns, | ||||||
|  | 			       HRTIMER_MODE_REL_PINNED_SOFT); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static inline void tcp_ack_snd_check(struct sock *sk) | static inline void tcp_ack_snd_check(struct sock *sk) | ||||||
|  |  | ||||||
|  | @ -2780,6 +2780,7 @@ static int __net_init tcp_sk_init(struct net *net) | ||||||
| 		       sizeof(init_net.ipv4.sysctl_tcp_wmem)); | 		       sizeof(init_net.ipv4.sysctl_tcp_wmem)); | ||||||
| 	} | 	} | ||||||
| 	net->ipv4.sysctl_tcp_comp_sack_delay_ns = NSEC_PER_MSEC; | 	net->ipv4.sysctl_tcp_comp_sack_delay_ns = NSEC_PER_MSEC; | ||||||
|  | 	net->ipv4.sysctl_tcp_comp_sack_slack_ns = 100 * NSEC_PER_USEC; | ||||||
| 	net->ipv4.sysctl_tcp_comp_sack_nr = 44; | 	net->ipv4.sysctl_tcp_comp_sack_nr = 44; | ||||||
| 	net->ipv4.sysctl_tcp_fastopen = TFO_CLIENT_ENABLE; | 	net->ipv4.sysctl_tcp_fastopen = TFO_CLIENT_ENABLE; | ||||||
| 	spin_lock_init(&net->ipv4.tcp_fastopen_ctx_lock); | 	spin_lock_init(&net->ipv4.tcp_fastopen_ctx_lock); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Eric Dumazet
						Eric Dumazet