Commit a70437cc authored by Eric Dumazet's avatar Eric Dumazet Committed by David S. Miller
Browse files

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: default avatarEric Dumazet <edumazet@google.com>
Acked-by: default avatarSoheil Hassas Yeganeh <soheil@google.com>
Acked-by: default avatarNeal Cardwell <ncardwell@google.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent ccd0628f
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -651,6 +651,14 @@ tcp_comp_sack_delay_ns - LONG INTEGER

	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
	Max number of SACK that can be compressed.
	Using 0 disables SACK compression.
+1 −0
Original line number Diff line number Diff line
@@ -173,6 +173,7 @@ struct netns_ipv4 {
	int sysctl_tcp_rmem[3];
	int sysctl_tcp_comp_sack_nr;
	unsigned long sysctl_tcp_comp_sack_delay_ns;
	unsigned long sysctl_tcp_comp_sack_slack_ns;
	struct inet_timewait_death_row tcp_death_row;
	int sysctl_max_syn_backlog;
	int sysctl_tcp_fastopen;
+7 −0
Original line number Diff line number Diff line
@@ -1329,6 +1329,13 @@ static struct ctl_table ipv4_net_table[] = {
		.mode		= 0644,
		.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",
		.data		= &init_net.ipv4.sysctl_tcp_comp_sack_nr,
+3 −2
Original line number Diff line number Diff line
@@ -5324,7 +5324,8 @@ send_now:
	delay = min_t(unsigned long, sock_net(sk)->ipv4.sysctl_tcp_comp_sack_delay_ns,
		      rtt * (NSEC_PER_USEC >> 3)/20);
	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),
			       sock_net(sk)->ipv4.sysctl_tcp_comp_sack_slack_ns,
			       HRTIMER_MODE_REL_PINNED_SOFT);
}

+1 −0
Original line number Diff line number Diff line
@@ -2780,6 +2780,7 @@ static int __net_init tcp_sk_init(struct net *net)
		       sizeof(init_net.ipv4.sysctl_tcp_wmem));
	}
	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_fastopen = TFO_CLIENT_ENABLE;
	spin_lock_init(&net->ipv4.tcp_fastopen_ctx_lock);