From 04b4204d9c58c2a68f0d3993e7b73c9040907846 Mon Sep 17 00:00:00 2001 From: Florin Coras Date: Wed, 30 Oct 2019 09:22:14 -0700 Subject: tcp: improve lost rxt heuristic Type: feature - retransmit first unacked segment if newer retransmitted packets are acked - avoid spurious retransmits if recovery ends with sacked bytes Change-Id: Ic1b56d22e025822edb7609afb136e47440ea6032 Signed-off-by: Florin Coras (cherry picked from commit b3dce89a768aaffa2a830ba6579cd3d9c8cd967a) --- src/vnet/tcp/tcp_output.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src/vnet/tcp/tcp_output.c') diff --git a/src/vnet/tcp/tcp_output.c b/src/vnet/tcp/tcp_output.c index c1ecaba1fb3..4ba127cbd67 100644 --- a/src/vnet/tcp/tcp_output.c +++ b/src/vnet/tcp/tcp_output.c @@ -1848,6 +1848,9 @@ tcp_retransmit_should_retry_head (tcp_connection_t * tc, u32 tx_adv_sack = sb->high_sacked - tc->snd_congestion; f64 rr = (f64) tc->ssthresh / tc->prev_cwnd; + if (tcp_fastrecovery_first (tc)) + return 1; + return (tx_adv_sack > (tc->snd_una - tc->prr_start) * rr); } @@ -1926,6 +1929,8 @@ tcp_retransmit_sack (tcp_worker_ctx_t * wrk, tcp_connection_t * tc, ASSERT (tc->rxt_delivered <= tc->snd_rxt_bytes); } + tcp_fastrecovery_first_off (tc); + TCP_EVT (TCP_EVT_CC_EVT, tc, 0); hole = scoreboard_get_hole (sb, sb->cur_rxt_hole); -- cgit 1.2.3-korg