forked from Minki/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
@ -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,7 +5324,8 @@ send_now:
|
|||||||
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),
|
||||||
|
sock_net(sk)->ipv4.sysctl_tcp_comp_sack_slack_ns,
|
||||||
HRTIMER_MODE_REL_PINNED_SOFT);
|
HRTIMER_MODE_REL_PINNED_SOFT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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 New Issue
Block a user