mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-11 13:27:06 +09:00
tcp: allow at most one TLP probe per flight
[ Upstream commit 76be93fc07 ]
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>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
15a9765cf8
commit
35c3c8f01c
@@ -218,6 +218,8 @@ struct tcp_sock {
|
||||
u8 reord; /* reordering detected */
|
||||
} rack;
|
||||
u16 advmss; /* Advertised MSS */
|
||||
u8 tlp_retrans:1, /* TLP is a retransmission */
|
||||
unused_1:7;
|
||||
u8 rate_app_limited:1, /* rate_{delivered,interval_us} limited? */
|
||||
is_sack_reneg:1, /* in recovery from loss with SACK reneg? */
|
||||
unused:6;
|
||||
@@ -234,7 +236,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 */
|
||||
|
||||
Reference in New Issue
Block a user