mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-18 22:14:16 +00:00
tcp: add sysctl_tcp_rto_min_us
Adding a sysctl knob to allow user to specify a default rto_min at socket init time, other than using the hard coded 200ms default rto_min. Note that the rto_min route option has the highest precedence for configuring this setting, followed by the TCP_BPF_RTO_MIN socket option, followed by the tcp_rto_min_us sysctl. Signed-off-by: Kevin Yang <yyd@google.com> Reviewed-by: Neal Cardwell <ncardwell@google.com> Reviewed-by: Yuchung Cheng <ycheng@google.com> Reviewed-by: Eric Dumazet <edumazet@google.com> Reviewed-by: Tony Lu <tonylu@linux.alibaba.com> Reviewed-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
512bd0f9f9
commit
f086edef71
5 changed files with 26 additions and 1 deletions
|
@ -1196,6 +1196,19 @@ tcp_pingpong_thresh - INTEGER
|
||||||
|
|
||||||
Default: 1
|
Default: 1
|
||||||
|
|
||||||
|
tcp_rto_min_us - INTEGER
|
||||||
|
Minimal TCP retransmission timeout (in microseconds). Note that the
|
||||||
|
rto_min route option has the highest precedence for configuring this
|
||||||
|
setting, followed by the TCP_BPF_RTO_MIN socket option, followed by
|
||||||
|
this tcp_rto_min_us sysctl.
|
||||||
|
|
||||||
|
The recommended practice is to use a value less or equal to 200000
|
||||||
|
microseconds.
|
||||||
|
|
||||||
|
Possible Values: 1 - INT_MAX
|
||||||
|
|
||||||
|
Default: 200000
|
||||||
|
|
||||||
UDP variables
|
UDP variables
|
||||||
=============
|
=============
|
||||||
|
|
||||||
|
|
|
@ -170,6 +170,7 @@ struct netns_ipv4 {
|
||||||
u8 sysctl_tcp_sack;
|
u8 sysctl_tcp_sack;
|
||||||
u8 sysctl_tcp_window_scaling;
|
u8 sysctl_tcp_window_scaling;
|
||||||
u8 sysctl_tcp_timestamps;
|
u8 sysctl_tcp_timestamps;
|
||||||
|
int sysctl_tcp_rto_min_us;
|
||||||
u8 sysctl_tcp_recovery;
|
u8 sysctl_tcp_recovery;
|
||||||
u8 sysctl_tcp_thin_linear_timeouts;
|
u8 sysctl_tcp_thin_linear_timeouts;
|
||||||
u8 sysctl_tcp_slow_start_after_idle;
|
u8 sysctl_tcp_slow_start_after_idle;
|
||||||
|
|
|
@ -1503,6 +1503,14 @@ static struct ctl_table ipv4_net_table[] = {
|
||||||
.proc_handler = proc_dou8vec_minmax,
|
.proc_handler = proc_dou8vec_minmax,
|
||||||
.extra1 = SYSCTL_ONE,
|
.extra1 = SYSCTL_ONE,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.procname = "tcp_rto_min_us",
|
||||||
|
.data = &init_net.ipv4.sysctl_tcp_rto_min_us,
|
||||||
|
.maxlen = sizeof(int),
|
||||||
|
.mode = 0644,
|
||||||
|
.proc_handler = proc_dointvec_minmax,
|
||||||
|
.extra1 = SYSCTL_ONE,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static __net_init int ipv4_sysctl_init_net(struct net *net)
|
static __net_init int ipv4_sysctl_init_net(struct net *net)
|
||||||
|
|
|
@ -420,6 +420,7 @@ void tcp_init_sock(struct sock *sk)
|
||||||
{
|
{
|
||||||
struct inet_connection_sock *icsk = inet_csk(sk);
|
struct inet_connection_sock *icsk = inet_csk(sk);
|
||||||
struct tcp_sock *tp = tcp_sk(sk);
|
struct tcp_sock *tp = tcp_sk(sk);
|
||||||
|
int rto_min_us;
|
||||||
|
|
||||||
tp->out_of_order_queue = RB_ROOT;
|
tp->out_of_order_queue = RB_ROOT;
|
||||||
sk->tcp_rtx_queue = RB_ROOT;
|
sk->tcp_rtx_queue = RB_ROOT;
|
||||||
|
@ -428,7 +429,8 @@ void tcp_init_sock(struct sock *sk)
|
||||||
INIT_LIST_HEAD(&tp->tsorted_sent_queue);
|
INIT_LIST_HEAD(&tp->tsorted_sent_queue);
|
||||||
|
|
||||||
icsk->icsk_rto = TCP_TIMEOUT_INIT;
|
icsk->icsk_rto = TCP_TIMEOUT_INIT;
|
||||||
icsk->icsk_rto_min = TCP_RTO_MIN;
|
rto_min_us = READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_rto_min_us);
|
||||||
|
icsk->icsk_rto_min = usecs_to_jiffies(rto_min_us);
|
||||||
icsk->icsk_delack_max = TCP_DELACK_MAX;
|
icsk->icsk_delack_max = TCP_DELACK_MAX;
|
||||||
tp->mdev_us = jiffies_to_usecs(TCP_TIMEOUT_INIT);
|
tp->mdev_us = jiffies_to_usecs(TCP_TIMEOUT_INIT);
|
||||||
minmax_reset(&tp->rtt_min, tcp_jiffies32, ~0U);
|
minmax_reset(&tp->rtt_min, tcp_jiffies32, ~0U);
|
||||||
|
|
|
@ -3502,6 +3502,7 @@ static int __net_init tcp_sk_init(struct net *net)
|
||||||
net->ipv4.sysctl_tcp_shrink_window = 0;
|
net->ipv4.sysctl_tcp_shrink_window = 0;
|
||||||
|
|
||||||
net->ipv4.sysctl_tcp_pingpong_thresh = 1;
|
net->ipv4.sysctl_tcp_pingpong_thresh = 1;
|
||||||
|
net->ipv4.sysctl_tcp_rto_min_us = jiffies_to_usecs(TCP_RTO_MIN);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue