session: limit pacer bucket size 63/22063/5
authorFlorin Coras <fcoras@cisco.com>
Sun, 15 Sep 2019 23:28:45 +0000 (16:28 -0700)
committerFlorin Coras <florin.coras@gmail.com>
Tue, 17 Sep 2019 14:49:32 +0000 (14:49 +0000)
Type: feature

Change-Id: I3ca27b09670716eba463d7b16771f765a1bd6dcd
Signed-off-by: Florin Coras <fcoras@cisco.com>
src/vnet/session/transport.c
src/vnet/session/transport_types.h

index 6caa4d3..effd589 100644 (file)
@@ -581,7 +581,7 @@ spacer_max_burst (spacer_t * pacer, u64 norm_time_now)
   if (n_periods > 0 && (inc = n_periods * pacer->tokens_per_period) > 10)
     {
       pacer->last_update = norm_time_now;
-      pacer->bucket += inc;
+      pacer->bucket = clib_min (pacer->bucket + inc, pacer->bytes_per_sec);
     }
 
   return clib_min (pacer->bucket, TRANSPORT_PACER_MAX_BURST);
@@ -598,13 +598,14 @@ static inline void
 spacer_set_pace_rate (spacer_t * pacer, u64 rate_bytes_per_sec)
 {
   ASSERT (rate_bytes_per_sec != 0);
+  pacer->bytes_per_sec = rate_bytes_per_sec;
   pacer->tokens_per_period = rate_bytes_per_sec / transport_pacer_period;
 }
 
 static inline u64
 spacer_pace_rate (spacer_t * pacer)
 {
-  return pacer->tokens_per_period * transport_pacer_period;
+  return pacer->bytes_per_sec;
 }
 
 void
index ac2177c..b6e01b5 100644 (file)
@@ -49,6 +49,7 @@ typedef enum transport_connection_flags_
 
 typedef struct _spacer
 {
+  u64 bytes_per_sec;
   u64 bucket;
   u64 last_update;
   f32 tokens_per_period;