Branch data Line data Source code
1 : : /* SPDX-License-Identifier: BSD-3-Clause 2 : : * Copyright(c) 2017 Intel Corporation 3 : : */ 4 : : 5 : : #ifndef RTE_MEMBER_SKETCH_H 6 : : #define RTE_MEMBER_SKETCH_H 7 : : 8 : : #include <rte_vect.h> 9 : : #include <rte_ring_elem.h> 10 : : 11 : : #ifdef __cplusplus 12 : : extern "C" { 13 : : #endif 14 : : 15 : : #define NUM_ROW_SCALAR 5 16 : : #define INTERVAL (1 << 15) 17 : : 18 : : #if !RTE_IS_POWER_OF_2(INTERVAL) 19 : : #error sketch INTERVAL macro must be a power of 2 20 : : #endif 21 : : 22 : : int 23 : : rte_member_create_sketch(struct rte_member_setsum *ss, 24 : : const struct rte_member_parameters *params, 25 : : struct rte_ring *r); 26 : : 27 : : int 28 : : rte_member_lookup_sketch(const struct rte_member_setsum *setsum, 29 : : const void *key, member_set_t *set_id); 30 : : 31 : : int 32 : : rte_member_add_sketch(const struct rte_member_setsum *setsum, 33 : : const void *key, 34 : : member_set_t set_id); 35 : : 36 : : int 37 : : rte_member_add_sketch_byte_count(const struct rte_member_setsum *ss, 38 : : const void *key, uint32_t byte_count); 39 : : 40 : : void 41 : : sketch_update_scalar(const struct rte_member_setsum *ss, 42 : : const void *key, 43 : : uint32_t count); 44 : : 45 : : uint64_t 46 : : sketch_lookup_scalar(const struct rte_member_setsum *ss, 47 : : const void *key); 48 : : 49 : : void 50 : : sketch_delete_scalar(const struct rte_member_setsum *ss, 51 : : const void *key); 52 : : 53 : : int 54 : : rte_member_delete_sketch(const struct rte_member_setsum *setsum, 55 : : const void *key); 56 : : 57 : : int 58 : : rte_member_query_sketch(const struct rte_member_setsum *setsum, 59 : : const void *key, uint64_t *output); 60 : : 61 : : void 62 : : rte_member_free_sketch(struct rte_member_setsum *ss); 63 : : 64 : : void 65 : : rte_member_reset_sketch(const struct rte_member_setsum *setsum); 66 : : 67 : : int 68 : : rte_member_report_heavyhitter_sketch(const struct rte_member_setsum *setsum, 69 : : void **key, uint64_t *count); 70 : : 71 : : void 72 : : rte_member_update_heap(const struct rte_member_setsum *ss); 73 : : 74 : : static __rte_always_inline uint64_t 75 : : count_min(const struct rte_member_setsum *ss, const uint32_t *hash_results) 76 : : { 77 : 0 : uint64_t *count_array = ss->table; 78 : : uint64_t count; 79 : : uint32_t cur_row; 80 : : uint64_t min = UINT64_MAX; 81 : : 82 [ + + # # ]: 46404 : for (cur_row = 0; cur_row < ss->num_row; cur_row++) { 83 : 38670 : uint64_t cnt = count_array[cur_row * ss->num_col + hash_results[cur_row]]; 84 : : 85 : : if (cnt < min) 86 : : min = cnt; 87 : : } 88 : : count = min; 89 : : 90 : : return count; 91 : : } 92 : : 93 : : #ifdef __cplusplus 94 : : } 95 : : #endif 96 : : 97 : : #endif /* RTE_MEMBER_SKETCH_H */