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
220220 } rack;
221221 u16 advmss; /* Advertised MSS */
222222 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;
224226 u32 chrono_start; /* Start time in jiffies of a TCP chrono */
225227 u32 chrono_stat[3]; /* Time in jiffies for chrono_stat stats */
226228 u8 chrono_type:2, /* current chronograph type */
@@ -243,7 +245,7 @@ struct tcp_sock { · 16 unmodified lines
243245 save_syn:1, /* Save headers of SYN packet */
244246 is_cwnd_limited:1,/* forward progress limited by snd_cwnd? */
245247 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 */
247249
248250 u32 tcp_tx_delay; /* delay (in usec) added to TX packets */
249251 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