X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvppinfra%2Fbihash_template.c;h=a10dee025bf11cb5b3d593fc6d7988a116144904;hb=4168c4d914c36f76c45cd8c6dde207b9f1c688e2;hp=2840342a5ce81b8e8ea464d1b24527bd6fa45e40;hpb=a11bf45b1aba14246cc1259fff1dfb8e9c60581f;p=vpp.git diff --git a/src/vppinfra/bihash_template.c b/src/vppinfra/bihash_template.c index 2840342a5ce..a10dee025bf 100644 --- a/src/vppinfra/bihash_template.c +++ b/src/vppinfra/bihash_template.c @@ -196,6 +196,7 @@ void BV (clib_bihash_set_kvp_format_fn) (BVT (clib_bihash) * h, void BV (clib_bihash_free) (BVT (clib_bihash) * h) { vec_free (h->working_copies); + vec_free (h->working_copy_lengths); #if BIHASH_32_64_SVM == 0 vec_free (h->freelists); #else @@ -291,6 +292,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 +446,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 +479,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 +502,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 +516,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 +536,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 +554,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 +574,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 +600,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 */ @@ -746,7 +765,7 @@ u8 *BV (format_bihash) (u8 * s, va_list * args) { s = format (s, " %d: %U\n", j * BIHASH_KVP_PER_PAGE + k, - h->fmt_fn, &(v->kvp[k])); + h->fmt_fn, &(v->kvp[k]), verbose); } else {