From 89cd74427277692f77f2d38e79495592ad440a68 Mon Sep 17 00:00:00 2001 From: Brian Russell Date: Tue, 19 Jan 2021 16:46:08 +0000 Subject: policer: add thread index to policer Add a thread index field to the policer structure. The policer is not thread safe. The thread index will be used to tie it to one worker thread and other workers can use thread handoff. Type: improvement Signed-off-by: Brian Russell Change-Id: I650e983a9ed800bf660d6f06368717484c4a83bf --- src/vnet/policer/police.h | 10 +++++++--- src/vnet/policer/policer.c | 1 + 2 files changed, 8 insertions(+), 3 deletions(-) (limited to 'src/vnet/policer') diff --git a/src/vnet/policer/police.h b/src/vnet/policer/police.h index 7065adb6e30..1005a620ccd 100644 --- a/src/vnet/policer/police.h +++ b/src/vnet/policer/police.h @@ -50,9 +50,12 @@ typedef enum // computes the shift amount be the largest possible that still supports the // burst size. This makes the rate accuracy as high as possible. // -// The 64-bit last_update_time supports a 4Ghz CPU without rollover for 100 years +// The 64-bit last_update_time supports a 4Ghz CPU without rollover for 100 +// years // -// The lock field should be used for a spin-lock on the struct. +// The lock field should be used for a spin-lock on the struct. Alternatively, +// a thread index field is provided so that policed packets may be handed +// off to a single worker thread. #define POLICER_TICKS_PER_PERIOD_SHIFT 17 #define POLICER_TICKS_PER_PERIOD (1 << POLICER_TICKS_PER_PERIOD_SHIFT) @@ -82,7 +85,8 @@ typedef struct u32 extended_bucket; // MOD u64 last_update_time; // MOD - u64 pad64; + u32 thread_index; // Tie policer to a thread, rather than lock + u32 pad32; } policer_read_response_type_st; diff --git a/src/vnet/policer/policer.c b/src/vnet/policer/policer.c index 9611fe0fa4e..7ad87a6ebdf 100644 --- a/src/vnet/policer/policer.c +++ b/src/vnet/policer/policer.c @@ -87,6 +87,7 @@ policer_add_del (vlib_main_t * vm, pi = policer - pm->policers; hash_set_mem (pm->policer_index_by_name, name, pi); *policer_index = pi; + policer->thread_index = ~0; } else { -- cgit 1.2.3-korg