From abdc7dfb5f2a335744296ba4d01955c8f3c11f62 Mon Sep 17 00:00:00 2001 From: Florin Coras Date: Sun, 6 Oct 2019 14:06:14 -0700 Subject: tcp: improve pacing after idle send periods Rest pacer on ack reception if we haven't recently sent anything. Type: feature Change-Id: I820bacd81b65130052dfafbfcbe6ca4553069fbc Signed-off-by: Florin Coras (cherry picked from commit c31dc31f84961033ecb6354811e0c360b6cf5f79) --- src/vnet/session/transport.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'src/vnet/session/transport.c') diff --git a/src/vnet/session/transport.c b/src/vnet/session/transport.c index 49a4af71111..8f7e30c8602 100644 --- a/src/vnet/session/transport.c +++ b/src/vnet/session/transport.c @@ -47,10 +47,6 @@ static clib_spinlock_t local_endpoints_lock; */ static double transport_pacer_period; -#define TRANSPORT_PACER_MIN_MSS 1460 -#define TRANSPORT_PACER_MIN_BURST TRANSPORT_PACER_MIN_MSS -#define TRANSPORT_PACER_MAX_BURST (43 * TRANSPORT_PACER_MIN_MSS) - u8 * format_transport_proto (u8 * s, va_list * args) { @@ -583,6 +579,13 @@ spacer_max_burst (spacer_t * pacer, u64 norm_time_now) u64 n_periods = norm_time_now - pacer->last_update; u64 inc; + if (PREDICT_FALSE (n_periods > 5e5)) + { + pacer->last_update = norm_time_now; + pacer->bucket = TRANSPORT_PACER_MIN_BURST; + return TRANSPORT_PACER_MIN_BURST; + } + if (n_periods > 0 && (inc = (f32) n_periods * pacer->tokens_per_period) > 10) { @@ -674,7 +677,7 @@ transport_connection_snd_space (transport_connection_t * tc, u64 time_now, u32 snd_space, max_paced_burst; snd_space = tp_vfts[tc->proto].send_space (tc); - if (transport_connection_is_tx_paced (tc)) + if (snd_space && transport_connection_is_tx_paced (tc)) { time_now >>= SPACER_CPU_TICKS_PER_PERIOD_SHIFT; max_paced_burst = spacer_max_burst (&tc->pacer, time_now); -- cgit 1.2.3-korg