@@ -632,7 +632,7 @@ format_transport_pacer (u8 * s, va_list * args)
632632
633633 now = transport_us_time_now (thread_index );
634634 diff = now - pacer -> last_update ;
635- s = format (s , "rate %lu bucket %lu t/p %.3f last_update %U burst %u" ,
635+ s = format (s , "rate %lu bucket %ld t/p %.3f last_update %U burst %u" ,
636636 pacer -> bytes_per_sec , pacer -> bucket , pacer -> tokens_per_period ,
637637 format_clib_us_time , diff , pacer -> max_burst );
638638 return s ;
@@ -661,7 +661,7 @@ spacer_update_bucket (spacer_t * pacer, u32 bytes)
661661
662662static inline void
663663spacer_set_pace_rate (spacer_t * pacer , u64 rate_bytes_per_sec ,
664- clib_us_time_t rtt )
664+ clib_us_time_t rtt , clib_time_type_t sec_per_loop )
665665{
666666 clib_us_time_t max_time ;
667667
@@ -678,7 +678,8 @@ spacer_set_pace_rate (spacer_t * pacer, u64 rate_bytes_per_sec,
678678 *
679679 * Max "time-length" of a burst cannot be less than 1us or more than 1ms.
680680 */
681- max_time = rtt / TRANSPORT_PACER_BURSTS_PER_RTT ;
681+ max_time = clib_max (rtt / TRANSPORT_PACER_BURSTS_PER_RTT ,
682+ (clib_us_time_t ) (sec_per_loop * CLIB_US_TIME_FREQ ));
682683 max_time = clib_clamp (max_time , 1 /* 1us */ , 1000 /* 1ms */ );
683684 pacer -> max_burst = (rate_bytes_per_sec * max_time ) * CLIB_US_TIME_PERIOD ;
684685 pacer -> max_burst = clib_clamp (pacer -> max_burst , TRANSPORT_PACER_MIN_BURST ,
@@ -703,7 +704,8 @@ transport_connection_tx_pacer_reset (transport_connection_t * tc,
703704 u64 rate_bytes_per_sec , u32 start_bucket ,
704705 clib_us_time_t rtt )
705706{
706- spacer_set_pace_rate (& tc -> pacer , rate_bytes_per_sec , rtt );
707+ spacer_set_pace_rate (& tc -> pacer , rate_bytes_per_sec , rtt ,
708+ transport_seconds_per_loop (tc -> thread_index ));
707709 spacer_reset (& tc -> pacer , transport_us_time_now (tc -> thread_index ),
708710 start_bucket );
709711}
729731transport_connection_tx_pacer_update (transport_connection_t * tc ,
730732 u64 bytes_per_sec , clib_us_time_t rtt )
731733{
732- spacer_set_pace_rate (& tc -> pacer , bytes_per_sec , rtt );
734+ spacer_set_pace_rate (& tc -> pacer , bytes_per_sec , rtt ,
735+ transport_seconds_per_loop (tc -> thread_index ));
733736}
734737
735738u32
0 commit comments