Commit 6d82aa24 authored by Eric Dumazet's avatar Eric Dumazet Committed by David S. Miller

tcp: add tcp_comp_sack_delay_ns sysctl

This per netns sysctl allows for TCP SACK compression fine-tuning.

Its default value is 1,000,000, or 1 ms to meet TSO autosizing period.
Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
Acked-by: default avatarNeal Cardwell <ncardwell@google.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 200d95f4
...@@ -525,6 +525,13 @@ tcp_rmem - vector of 3 INTEGERs: min, default, max ...@@ -525,6 +525,13 @@ tcp_rmem - vector of 3 INTEGERs: min, default, max
tcp_sack - BOOLEAN tcp_sack - BOOLEAN
Enable select acknowledgments (SACKS). Enable select acknowledgments (SACKS).
tcp_comp_sack_delay_ns - LONG INTEGER
TCP tries to reduce number of SACK sent, using a timer
based on 5% of SRTT, capped by this sysctl, in nano seconds.
The default is 1ms, based on TSO autosizing period.
Default : 1,000,000 ns (1 ms)
tcp_slow_start_after_idle - BOOLEAN tcp_slow_start_after_idle - BOOLEAN
If set, provide RFC2861 behavior and time out the congestion If set, provide RFC2861 behavior and time out the congestion
window after an idle period. An idle period is defined at window after an idle period. An idle period is defined at
......
...@@ -160,6 +160,7 @@ struct netns_ipv4 { ...@@ -160,6 +160,7 @@ struct netns_ipv4 {
int sysctl_tcp_pacing_ca_ratio; int sysctl_tcp_pacing_ca_ratio;
int sysctl_tcp_wmem[3]; int sysctl_tcp_wmem[3];
int sysctl_tcp_rmem[3]; int sysctl_tcp_rmem[3];
unsigned long sysctl_tcp_comp_sack_delay_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;
......
...@@ -1151,6 +1151,13 @@ static struct ctl_table ipv4_net_table[] = { ...@@ -1151,6 +1151,13 @@ static struct ctl_table ipv4_net_table[] = {
.proc_handler = proc_dointvec_minmax, .proc_handler = proc_dointvec_minmax,
.extra1 = &one, .extra1 = &one,
}, },
{
.procname = "tcp_comp_sack_delay_ns",
.data = &init_net.ipv4.sysctl_tcp_comp_sack_delay_ns,
.maxlen = sizeof(unsigned long),
.mode = 0644,
.proc_handler = proc_doulongvec_minmax,
},
{ {
.procname = "udp_rmem_min", .procname = "udp_rmem_min",
.data = &init_net.ipv4.sysctl_udp_rmem_min, .data = &init_net.ipv4.sysctl_udp_rmem_min,
......
...@@ -5113,13 +5113,13 @@ static void __tcp_ack_snd_check(struct sock *sk, int ofo_possible) ...@@ -5113,13 +5113,13 @@ static void __tcp_ack_snd_check(struct sock *sk, int ofo_possible)
if (hrtimer_is_queued(&tp->compressed_ack_timer)) if (hrtimer_is_queued(&tp->compressed_ack_timer))
return; return;
/* compress ack timer : 5 % of rtt, but no more than 1 ms */ /* compress ack timer : 5 % of rtt, but no more than tcp_comp_sack_delay_ns */
rtt = tp->rcv_rtt_est.rtt_us; rtt = tp->rcv_rtt_est.rtt_us;
if (tp->srtt_us && tp->srtt_us < rtt) if (tp->srtt_us && tp->srtt_us < rtt)
rtt = tp->srtt_us; rtt = tp->srtt_us;
delay = min_t(unsigned long, NSEC_PER_MSEC, 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(&tp->compressed_ack_timer, ns_to_ktime(delay),
......
...@@ -2572,6 +2572,7 @@ static int __net_init tcp_sk_init(struct net *net) ...@@ -2572,6 +2572,7 @@ static int __net_init tcp_sk_init(struct net *net)
init_net.ipv4.sysctl_tcp_wmem, init_net.ipv4.sysctl_tcp_wmem,
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_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);
net->ipv4.sysctl_tcp_fastopen_blackhole_timeout = 60 * 60; net->ipv4.sysctl_tcp_fastopen_blackhole_timeout = 60 * 60;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment