diff options
author | Dave Barach <dave@barachs.net> | 2019-05-03 12:58:01 -0400 |
---|---|---|
committer | Florin Coras <florin.coras@gmail.com> | 2019-05-07 15:52:38 +0000 |
commit | 2ce28d6014f44a98f5b3387a4709dd56dbc2f8df (patch) | |
tree | 97b1a43966f0f22eab4e7e8904b047a984a3c1c0 /src/vppinfra/bihash_template.c | |
parent | c74009dce1b2f1466112775a68a5608d754c7c76 (diff) |
Add bihash statistics hook
Example / unit-test in .../src/plugins/unittest/bihash_test.c
Change-Id: I23fd0ba742d65291667a755965aee1a3d3477ca2
Signed-off-by: Dave Barach <dave@barachs.net>
Diffstat (limited to 'src/vppinfra/bihash_template.c')
-rw-r--r-- | src/vppinfra/bihash_template.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/vppinfra/bihash_template.c b/src/vppinfra/bihash_template.c index 2840342a5ce..9de1df4c59c 100644 --- a/src/vppinfra/bihash_template.c +++ b/src/vppinfra/bihash_template.c @@ -291,6 +291,9 @@ BV (make_working_copy) (BVT (clib_bihash) * h, BVT (clib_bihash_bucket) * b) (h, sizeof (working_copy[0]) * (1 << b->log2_pages)); h->working_copy_lengths[thread_index] = b->log2_pages; h->working_copies[thread_index] = working_copy; + + BV (clib_bihash_increment_stat) (h, BIHASH_STAT_working_copy_lost, + 1ULL << b->log2_pages); } v = BV (clib_bihash_get_value) (h, b->offset); @@ -442,6 +445,8 @@ static inline int BV (clib_bihash_add_del_inline) CLIB_MEMORY_BARRIER (); b->as_u64 = tmp_b.as_u64; /* unlocks the bucket */ + BV (clib_bihash_increment_stat) (h, BIHASH_STAT_alloc_add, 1); + return (0); } @@ -473,6 +478,7 @@ static inline int BV (clib_bihash_add_del_inline) CLIB_MEMORY_BARRIER (); /* Add a delay */ clib_memcpy_fast (&(v->kvp[i]), add_v, sizeof (*add_v)); BV (clib_bihash_unlock_bucket) (b); + BV (clib_bihash_increment_stat) (h, BIHASH_STAT_replace, 1); return (0); } } @@ -495,6 +501,7 @@ static inline int BV (clib_bihash_add_del_inline) b->refcnt++; ASSERT (b->refcnt > 0); BV (clib_bihash_unlock_bucket) (b); + BV (clib_bihash_increment_stat) (h, BIHASH_STAT_add, 1); return (0); } } @@ -508,6 +515,7 @@ static inline int BV (clib_bihash_add_del_inline) CLIB_MEMORY_BARRIER (); clib_memcpy_fast (&(v->kvp[i]), add_v, sizeof (*add_v)); BV (clib_bihash_unlock_bucket) (b); + BV (clib_bihash_increment_stat) (h, BIHASH_STAT_replace, 1); return (0); } } @@ -527,6 +535,7 @@ static inline int BV (clib_bihash_add_del_inline) { b->refcnt--; BV (clib_bihash_unlock_bucket) (b); + BV (clib_bihash_increment_stat) (h, BIHASH_STAT_del, 1); return (0); } else /* yes, free it */ @@ -544,6 +553,8 @@ static inline int BV (clib_bihash_add_del_inline) v = BV (clib_bihash_get_value) (h, tmp_b.offset); BV (value_free) (h, v, tmp_b.log2_pages); BV (clib_bihash_alloc_unlock) (h); + BV (clib_bihash_increment_stat) (h, BIHASH_STAT_del_free, + 1); return (0); } } @@ -562,9 +573,12 @@ static inline int BV (clib_bihash_add_del_inline) old_log2_pages = h->saved_bucket.log2_pages; new_log2_pages = old_log2_pages + 1; mark_bucket_linear = 0; + BV (clib_bihash_increment_stat) (h, BIHASH_STAT_split_add, 1); + BV (clib_bihash_increment_stat) (h, BIHASH_STAT_splits, old_log2_pages); working_copy = h->working_copies[thread_index]; resplit_once = 0; + BV (clib_bihash_increment_stat) (h, BIHASH_STAT_splits, 1); new_v = BV (split_and_rehash) (h, working_copy, old_log2_pages, new_log2_pages); @@ -585,7 +599,11 @@ static inline int BV (clib_bihash_add_del_inline) BV (split_and_rehash_linear) (h, working_copy, old_log2_pages, new_log2_pages); mark_bucket_linear = 1; + BV (clib_bihash_increment_stat) (h, BIHASH_STAT_linear, 1); } + BV (clib_bihash_increment_stat) (h, BIHASH_STAT_resplit, 1); + BV (clib_bihash_increment_stat) (h, BIHASH_STAT_splits, + old_log2_pages + 1); } /* Try to add the new entry */ |