summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorYuchung Cheng <ycheng@google.com>2020-07-23 12:00:06 -0700
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2020-07-31 16:43:16 +0200
commit4463a6bc4e728b9c8466da42aa8bdde28980060d (patch)
tree87a0f7825ea07e3bb6360f646110b654656ee5db /include
parentc8a826b20f428786adc8cb3e015d8566194008e8 (diff)
downloadlinux-stable-4463a6bc4e728b9c8466da42aa8bdde28980060d.tar.gz
linux-stable-4463a6bc4e728b9c8466da42aa8bdde28980060d.tar.bz2
linux-stable-4463a6bc4e728b9c8466da42aa8bdde28980060d.zip
tcp: allow at most one TLP probe per flight
[ Upstream commit 76be93fc0702322179bb0ea87295d820ee46ad14 ] Previously TLP may send multiple probes of new data in one flight. This happens when the sender is cwnd limited. After the initial TLP containing new data is sent, the sender receives another ACK that acks partial inflight. It may re-arm another TLP timer to send more, if no further ACK returns before the next TLP timeout (PTO) expires. The sender may send in theory a large amount of TLP until send queue is depleted. This only happens if the sender sees such irregular uncommon ACK pattern. But it is generally undesirable behavior during congestion especially. The original TLP design restrict only one TLP probe per inflight as published in "Reducing Web Latency: the Virtue of Gentle Aggression", SIGCOMM 2013. This patch changes TLP to send at most one probe per inflight. Note that if the sender is app-limited, TLP retransmits old data and did not have this issue. Signed-off-by: Yuchung Cheng <ycheng@google.com> Signed-off-by: Neal Cardwell <ncardwell@google.com> Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'include')
-rw-r--r--include/linux/tcp.h5
1 files changed, 3 insertions, 2 deletions
diff --git a/include/linux/tcp.h b/include/linux/tcp.h
index 085da1707cea..b9e591582be9 100644
--- a/include/linux/tcp.h
+++ b/include/linux/tcp.h
@@ -211,7 +211,8 @@ struct tcp_sock {
u8 reord; /* reordering detected */
} rack;
u16 advmss; /* Advertised MSS */
- u8 unused;
+ u8 tlp_retrans:1, /* TLP is a retransmission */
+ unused_1:7;
u8 nonagle : 4,/* Disable Nagle algorithm? */
thin_lto : 1,/* Use linear timeouts for thin streams */
thin_dupack : 1,/* Fast retransmit on first dupack */
@@ -225,7 +226,7 @@ struct tcp_sock {
syn_data_acked:1,/* data in SYN is acked by SYN-ACK */
save_syn:1, /* Save headers of SYN packet */
is_cwnd_limited:1;/* forward progress limited by snd_cwnd? */
- u32 tlp_high_seq; /* snd_nxt at the time of TLP retransmit. */
+ u32 tlp_high_seq; /* snd_nxt at the time of TLP */
/* RTT measurement */
u32 srtt_us; /* smoothed round trip time << 3 in usecs */