History

tcp: allow at most one TLP probe per flight

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.

Yuchung Cheng committed 6 years ago

Commit 76be93f1 parent 17ad73e3 files · +18 −12Browse files

Showing the changes to include/linux (1 of 3 files). Show all

Unified · Split

include/linux/tcp.h+4−2
@@ -220,7 +220,9 @@ struct tcp_sock { · 219 unmodified lines
220 } rack;220 } rack;
221 u16 advmss; /* Advertised MSS */221 u16 advmss; /* Advertised MSS */
222 u8 compressed_ack;222 u8 compressed_ack;
223 u8 dup_ack_counter;223 u8 dup_ack_counter:2,
224 tlp_retrans:1, /* TLP is a retransmission */
225 unused:5;
224 u32 chrono_start; /* Start time in jiffies of a TCP chrono */226 u32 chrono_start; /* Start time in jiffies of a TCP chrono */
225 u32 chrono_stat[3]; /* Time in jiffies for chrono_stat stats */227 u32 chrono_stat[3]; /* Time in jiffies for chrono_stat stats */
226 u8 chrono_type:2, /* current chronograph type */228 u8 chrono_type:2, /* current chronograph type */
@@ -243,7 +245,7 @@ struct tcp_sock { · 16 unmodified lines
243 save_syn:1, /* Save headers of SYN packet */245 save_syn:1, /* Save headers of SYN packet */
244 is_cwnd_limited:1,/* forward progress limited by snd_cwnd? */246 is_cwnd_limited:1,/* forward progress limited by snd_cwnd? */
245 syn_smc:1; /* SYN includes SMC */247 syn_smc:1; /* SYN includes SMC */
246 u32 tlp_high_seq; /* snd_nxt at the time of TLP retransmit. */248 u32 tlp_high_seq; /* snd_nxt at the time of TLP */
247 249
248 u32 tcp_tx_delay; /* delay (in usec) added to TX packets */250 u32 tcp_tx_delay; /* delay (in usec) added to TX packets */
249 u64 tcp_wstamp_ns; /* departure time for next sent data packet */251 u64 tcp_wstamp_ns; /* departure time for next sent data packet */

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t