aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/networking/ip-sysctl.txt7
-rw-r--r--include/net/netns/ipv4.h1
-rw-r--r--net/ipv4/sysctl_net_ipv4.c7
-rw-r--r--net/ipv4/tcp_input.c4
-rw-r--r--net/ipv4/tcp_ipv4.c1
5 files changed, 18 insertions, 2 deletions
diff --git a/Documentation/networking/ip-sysctl.txt b/Documentation/networking/ip-sysctl.txt
index ea304a23c8d7..7ba952959bca 100644
--- a/Documentation/networking/ip-sysctl.txt
+++ b/Documentation/networking/ip-sysctl.txt
@@ -525,6 +525,13 @@ tcp_rmem - vector of 3 INTEGERs: min, default, max
525tcp_sack - BOOLEAN 525tcp_sack - BOOLEAN
526 Enable select acknowledgments (SACKS). 526 Enable select acknowledgments (SACKS).
527 527
528tcp_comp_sack_delay_ns - LONG INTEGER
529 TCP tries to reduce number of SACK sent, using a timer
530 based on 5% of SRTT, capped by this sysctl, in nano seconds.
531 The default is 1ms, based on TSO autosizing period.
532
533 Default : 1,000,000 ns (1 ms)
534
528tcp_slow_start_after_idle - BOOLEAN 535tcp_slow_start_after_idle - BOOLEAN
529 If set, provide RFC2861 behavior and time out the congestion 536 If set, provide RFC2861 behavior and time out the congestion
530 window after an idle period. An idle period is defined at 537 window after an idle period. An idle period is defined at
diff --git a/include/net/netns/ipv4.h b/include/net/netns/ipv4.h
index 8491bc9c86b1..927318243cfa 100644
--- a/include/net/netns/ipv4.h
+++ b/include/net/netns/ipv4.h
@@ -160,6 +160,7 @@ struct netns_ipv4 {
160 int sysctl_tcp_pacing_ca_ratio; 160 int sysctl_tcp_pacing_ca_ratio;
161 int sysctl_tcp_wmem[3]; 161 int sysctl_tcp_wmem[3];
162 int sysctl_tcp_rmem[3]; 162 int sysctl_tcp_rmem[3];
163 unsigned long sysctl_tcp_comp_sack_delay_ns;
163 struct inet_timewait_death_row tcp_death_row; 164 struct inet_timewait_death_row tcp_death_row;
164 int sysctl_max_syn_backlog; 165 int sysctl_max_syn_backlog;
165 int sysctl_tcp_fastopen; 166 int sysctl_tcp_fastopen;
diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c
index 4b195bac8ac0..11fbfdc1566e 100644
--- a/net/ipv4/sysctl_net_ipv4.c
+++ b/net/ipv4/sysctl_net_ipv4.c
@@ -1152,6 +1152,13 @@ static struct ctl_table ipv4_net_table[] = {
1152 .extra1 = &one, 1152 .extra1 = &one,
1153 }, 1153 },
1154 { 1154 {
1155 .procname = "tcp_comp_sack_delay_ns",
1156 .data = &init_net.ipv4.sysctl_tcp_comp_sack_delay_ns,
1157 .maxlen = sizeof(unsigned long),
1158 .mode = 0644,
1159 .proc_handler = proc_doulongvec_minmax,
1160 },
1161 {
1155 .procname = "udp_rmem_min", 1162 .procname = "udp_rmem_min",
1156 .data = &init_net.ipv4.sysctl_udp_rmem_min, 1163 .data = &init_net.ipv4.sysctl_udp_rmem_min,
1157 .maxlen = sizeof(init_net.ipv4.sysctl_udp_rmem_min), 1164 .maxlen = sizeof(init_net.ipv4.sysctl_udp_rmem_min),
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index cc2ac5346b92..6a1dae38c955 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -5113,13 +5113,13 @@ send_now:
5113 if (hrtimer_is_queued(&tp->compressed_ack_timer)) 5113 if (hrtimer_is_queued(&tp->compressed_ack_timer))
5114 return; 5114 return;
5115 5115
5116 /* compress ack timer : 5 % of rtt, but no more than 1 ms */ 5116 /* compress ack timer : 5 % of rtt, but no more than tcp_comp_sack_delay_ns */
5117 5117
5118 rtt = tp->rcv_rtt_est.rtt_us; 5118 rtt = tp->rcv_rtt_est.rtt_us;
5119 if (tp->srtt_us && tp->srtt_us < rtt) 5119 if (tp->srtt_us && tp->srtt_us < rtt)
5120 rtt = tp->srtt_us; 5120 rtt = tp->srtt_us;
5121 5121
5122 delay = min_t(unsigned long, NSEC_PER_MSEC, 5122 delay = min_t(unsigned long, sock_net(sk)->ipv4.sysctl_tcp_comp_sack_delay_ns,
5123 rtt * (NSEC_PER_USEC >> 3)/20); 5123 rtt * (NSEC_PER_USEC >> 3)/20);
5124 sock_hold(sk); 5124 sock_hold(sk);
5125 hrtimer_start(&tp->compressed_ack_timer, ns_to_ktime(delay), 5125 hrtimer_start(&tp->compressed_ack_timer, ns_to_ktime(delay),
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
index caf23de88f8a..a3f4647341db 100644
--- a/net/ipv4/tcp_ipv4.c
+++ b/net/ipv4/tcp_ipv4.c
@@ -2572,6 +2572,7 @@ static int __net_init tcp_sk_init(struct net *net)
2572 init_net.ipv4.sysctl_tcp_wmem, 2572 init_net.ipv4.sysctl_tcp_wmem,
2573 sizeof(init_net.ipv4.sysctl_tcp_wmem)); 2573 sizeof(init_net.ipv4.sysctl_tcp_wmem));
2574 } 2574 }
2575 net->ipv4.sysctl_tcp_comp_sack_delay_ns = NSEC_PER_MSEC;
2575 net->ipv4.sysctl_tcp_fastopen = TFO_CLIENT_ENABLE; 2576 net->ipv4.sysctl_tcp_fastopen = TFO_CLIENT_ENABLE;
2576 spin_lock_init(&net->ipv4.tcp_fastopen_ctx_lock); 2577 spin_lock_init(&net->ipv4.tcp_fastopen_ctx_lock);
2577 net->ipv4.sysctl_tcp_fastopen_blackhole_timeout = 60 * 60; 2578 net->ipv4.sysctl_tcp_fastopen_blackhole_timeout = 60 * 60;