Skip to content

Commit a39f472

Browse files
committed
session: make pacer worker load aware
Type: improvement Signed-off-by: Florin Coras <fcoras@cisco.com> Change-Id: I71b9d54311fcad808fcdaad0df2dca8c161d580e
1 parent 7808df2 commit a39f472

File tree

2 files changed

+14
-5
lines changed

2 files changed

+14
-5
lines changed

src/vnet/session/session.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -552,6 +552,12 @@ transport_us_time_now (u32 thread_index)
552552
return session_main.wrk[thread_index].last_vlib_us_time;
553553
}
554554

555+
always_inline clib_time_type_t
556+
transport_seconds_per_loop (u32 thread_index)
557+
{
558+
return session_main.wrk[thread_index].vm->seconds_per_loop;
559+
}
560+
555561
always_inline void
556562
transport_add_tx_event (transport_connection_t * tc)
557563
{

src/vnet/session/transport.c

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

662662
static inline void
663663
spacer_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
}
@@ -729,7 +731,8 @@ void
729731
transport_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

735738
u32

0 commit comments

Comments
 (0)