diff options
author | Florin Coras <fcoras@cisco.com> | 2019-11-13 19:09:47 -0800 |
---|---|---|
committer | Dave Barach <openvpp@barachs.net> | 2019-11-20 18:34:07 +0000 |
commit | 11e9e351046d8f4ab61b8aaf975046215fba7c5d (patch) | |
tree | 950838b8740b5b7e56a5157df8ac748b3868c920 /src/vnet/tcp/tcp_output.c | |
parent | d28437cdf2133533c9092b881ce0e4c243d6c1f6 (diff) |
session tcp: support pacer idle timeouts
Type: feature
To avoid excessive bursts, pacer must be provided with an estimated rtt
for the connection. That's used to compute an idle timeout, i.e., time
after which the bucket is reset to 1 mtu due to inactivity. For now,
idle timeout is computed as 5% of the rtt.
Change-Id: Ia0b752fe7b4ad0ce97b477fb886b0133a2321541
Signed-off-by: Florin Coras <fcoras@cisco.com>
Diffstat (limited to 'src/vnet/tcp/tcp_output.c')
-rw-r--r-- | src/vnet/tcp/tcp_output.c | 25 |
1 files changed, 5 insertions, 20 deletions
diff --git a/src/vnet/tcp/tcp_output.c b/src/vnet/tcp/tcp_output.c index 64e3b1a584a..c06bbf19ef4 100644 --- a/src/vnet/tcp/tcp_output.c +++ b/src/vnet/tcp/tcp_output.c @@ -411,7 +411,7 @@ tcp_update_burst_snd_vars (tcp_connection_t * tc) if (tc->snd_una == tc->snd_nxt) { tcp_cc_event (tc, TCP_CC_EVT_START_TX); - tcp_connection_tx_pacer_reset (tc, tc->cwnd, TRANSPORT_PACER_MIN_MSS); + tcp_connection_tx_pacer_reset (tc, tc->cwnd, TRANSPORT_PACER_MIN_BURST); } } @@ -1875,9 +1875,9 @@ static int tcp_retransmit_sack (tcp_worker_ctx_t * wrk, tcp_connection_t * tc, u32 burst_size) { - u8 snd_limited = 0, can_rescue = 0, reset_pacer = 0; u32 n_written = 0, offset, max_bytes, n_segs = 0; - u32 bi, max_deq, burst_bytes, sent_bytes; + u8 snd_limited = 0, can_rescue = 0; + u32 bi, max_deq, burst_bytes; sack_scoreboard_hole_t *hole; vlib_main_t *vm = wrk->vm; vlib_buffer_t *b = 0; @@ -1900,12 +1900,7 @@ tcp_retransmit_sack (tcp_worker_ctx_t * wrk, tcp_connection_t * tc, snd_space = tcp_fastrecovery_prr_snd_space (tc); if (snd_space < tc->snd_mss) - { - reset_pacer = burst_bytes > tc->snd_mss; - goto done; - } - - reset_pacer = snd_space < burst_bytes; + goto done; sb = &tc->sack_sb; @@ -2021,17 +2016,7 @@ tcp_retransmit_sack (tcp_worker_ctx_t * wrk, tcp_connection_t * tc, done: - if (reset_pacer) - { - transport_connection_tx_pacer_reset_bucket (&tc->connection); - } - else - { - sent_bytes = clib_min (n_segs * tc->snd_mss, burst_bytes); - transport_connection_tx_pacer_update_bytes (&tc->connection, - sent_bytes); - } - + transport_connection_tx_pacer_reset_bucket (&tc->connection, 0); return n_segs; } |