diff options
author | Brian Russell <brian@graphiant.com> | 2021-01-19 16:46:08 +0000 |
---|---|---|
committer | Neale Ranns <neale@graphiant.com> | 2021-01-28 10:25:41 +0000 |
commit | 89cd74427277692f77f2d38e79495592ad440a68 (patch) | |
tree | 8bc08249b3cbefe58e67b2609ad7cbe7ea081f3a | |
parent | 3d5f08a825a978cd6853989a5df8c9b9811e7fb8 (diff) |
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 <brian@graphiant.com>
Change-Id: I650e983a9ed800bf660d6f06368717484c4a83bf
-rw-r--r-- | src/vnet/policer/police.h | 10 | ||||
-rw-r--r-- | src/vnet/policer/policer.c | 1 |
2 files changed, 8 insertions, 3 deletions
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 { |