DPDK  25.11.0
rte_member.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2017 Intel Corporation
3  */
4 
54 #ifndef _RTE_MEMBER_H_
55 #define _RTE_MEMBER_H_
56 
57 #include <stdint.h>
58 #include <stdbool.h>
59 #include <inttypes.h>
60 
61 #include <rte_common.h>
62 
64 typedef uint16_t member_set_t;
66 #define RTE_MEMBER_NO_MATCH 0
68 #define RTE_MEMBER_ENTRIES_MAX (1 << 30)
70 #define RTE_MEMBER_LOOKUP_BULK_MAX 64
72 #define RTE_MEMBER_BUCKET_ENTRIES 16
74 #define RTE_MEMBER_NAMESIZE 32
76 #define RTE_RAND_MAX ~0LLU
86 #define RTE_MEMBER_SKETCH_ALWAYS_BOUNDED 0x01
88 #define RTE_MEMBER_SKETCH_COUNT_BYTE 0x02
89 
90 #ifdef __cplusplus
91 extern "C" {
92 #endif
93 
95 struct rte_member_setsum;
96 
100 struct rte_member_parameters;
101 
108  RTE_MEMBER_TYPE_SKETCH,
109  RTE_MEMBER_NUM_TYPE
110 };
111 
113 enum rte_member_sig_compare_function {
114  RTE_MEMBER_COMPARE_SCALAR = 0,
115  RTE_MEMBER_COMPARE_AVX2,
116  RTE_MEMBER_COMPARE_NUM
117 };
118 
119 /* sketch update function with different implementations. */
120 typedef void (*sketch_update_fn_t)(const struct rte_member_setsum *ss,
121  const void *key,
122  uint32_t count);
123 
124 /* sketch lookup function with different implementations. */
125 typedef uint64_t (*sketch_lookup_fn_t)(const struct rte_member_setsum *ss,
126  const void *key);
127 
128 /* sketch delete function with different implementations. */
129 typedef void (*sketch_delete_fn_t)(const struct rte_member_setsum *ss,
130  const void *key);
131 
133 struct __rte_cache_aligned rte_member_setsum {
134  enum rte_member_setsum_type type; /* Type of the set summary. */
135  uint32_t key_len; /* Length of key. */
136  uint32_t prim_hash_seed; /* Primary hash function seed. */
137  uint32_t sec_hash_seed; /* Secondary hash function seed. */
138 
139  /* Hash table based. */
140  uint32_t bucket_cnt; /* Number of buckets. */
141  uint32_t bucket_mask; /* Bit mask to get bucket index. */
142  /* For runtime selecting AVX, scalar, etc for signature comparison. */
143  enum rte_member_sig_compare_function sig_cmp_fn;
144  uint8_t cache; /* If it is cache mode for ht based. */
145 
146  /* Vector bloom filter. */
147  uint32_t num_set; /* Number of set (bf) in vbf. */
148  uint32_t bits; /* Number of bits in each bf. */
149  uint32_t bit_mask; /* Bit mask to get bit location in bf. */
150  uint32_t num_hashes; /* Number of hash values to index bf. */
151 
152  /* Parameters for sketch */
153  float error_rate;
154  float sample_rate;
155  uint32_t num_col;
156  uint32_t num_row;
157  int always_bounded;
158  double converge_thresh;
159  uint32_t topk;
160  uint32_t count_byte;
161  uint64_t *hash_seeds;
162  sketch_update_fn_t sketch_update; /* Pointer to the sketch update function */
163  sketch_lookup_fn_t sketch_lookup; /* Pointer to the sketch lookup function */
164  sketch_delete_fn_t sketch_delete; /* Pointer to the sketch delete function */
165 
166  void *runtime_var;
167  uint32_t mul_shift; /* vbf internal variable used during bit test. */
168  uint32_t div_shift; /* vbf internal variable used during bit test. */
169 
170  void *table; /* This is the handler of hash table or vBF array. */
171 
172 
173  /* Second cache line should start here. */
174  uint32_t socket_id; /* NUMA Socket ID for memory. */
175  char name[RTE_MEMBER_NAMESIZE]; /* Name of this set summary. */
176 #ifdef RTE_ARCH_X86
177  bool use_avx512;
178 #endif
179 };
180 
187  const char *name;
199  enum rte_member_setsum_type type;
200 
220  uint8_t is_cache;
221 
238  uint32_t num_keys;
239 
244  uint32_t key_len;
245 
255  uint32_t num_set;
256 
277 
287  uint32_t prim_hash_seed;
288 
292  uint32_t sec_hash_seed;
293 
299  float error_rate;
300 
306  float sample_rate;
307 
312  uint32_t top_k;
313 
317  uint32_t extra_flag;
318 
319  int socket_id;
320 };
321 
332 struct rte_member_setsum *
333 rte_member_find_existing(const char *name);
334 
342 void
343 rte_member_free(struct rte_member_setsum *setsum);
344 
354 struct rte_member_setsum *
357 
371 int
372 rte_member_lookup(const struct rte_member_setsum *setsum, const void *key,
373  member_set_t *set_id);
374 
392 int
393 rte_member_lookup_bulk(const struct rte_member_setsum *setsum,
394  const void **keys, uint32_t num_keys,
395  member_set_t *set_ids);
396 
418 int
419 rte_member_lookup_multi(const struct rte_member_setsum *setsum,
420  const void *key, uint32_t max_match_per_key,
421  member_set_t *set_id);
422 
446 int
447 rte_member_lookup_multi_bulk(const struct rte_member_setsum *setsum,
448  const void **keys, uint32_t num_keys,
449  uint32_t max_match_per_key,
450  uint32_t *match_count,
451  member_set_t *set_ids);
452 
479 int
480 rte_member_add(const struct rte_member_setsum *setsum, const void *key,
481  member_set_t set_id);
482 
495 int
496 rte_member_add_byte_count(const struct rte_member_setsum *setsum,
497  const void *key, uint32_t byte_count);
498 
511 int
512 rte_member_query_count(const struct rte_member_setsum *setsum,
513  const void *key, uint64_t *count);
514 
515 
529 int
530 rte_member_report_heavyhitter(const struct rte_member_setsum *setsum,
531  void **keys, uint64_t *counts);
532 
540 void
541 rte_member_reset(const struct rte_member_setsum *setsum);
542 
558 int
559 rte_member_delete(const struct rte_member_setsum *setsum, const void *key,
560  member_set_t set_id);
561 
562 #ifdef __cplusplus
563 }
564 #endif
565 
566 #endif /* _RTE_MEMBER_H_ */
#define __rte_dealloc(dealloc, argno)
Definition: rte_common.h:339
#define __rte_cache_aligned
Definition: rte_common.h:739
#define __rte_malloc
Definition: rte_common.h:328
int rte_member_add(const struct rte_member_setsum *setsum, const void *key, member_set_t set_id)
int rte_member_lookup_bulk(const struct rte_member_setsum *setsum, const void **keys, uint32_t num_keys, member_set_t *set_ids)
int rte_member_query_count(const struct rte_member_setsum *setsum, const void *key, uint64_t *count)
struct rte_member_setsum * rte_member_find_existing(const char *name)
struct rte_member_setsum * rte_member_create(const struct rte_member_parameters *params) __rte_malloc __rte_dealloc(rte_member_free
int rte_member_delete(const struct rte_member_setsum *setsum, const void *key, member_set_t set_id)
struct rte_member_setsum int rte_member_lookup(const struct rte_member_setsum *setsum, const void *key, member_set_t *set_id)
int rte_member_report_heavyhitter(const struct rte_member_setsum *setsum, void **keys, uint64_t *counts)
uint16_t member_set_t
Definition: rte_member.h:64
#define RTE_MEMBER_NAMESIZE
Definition: rte_member.h:74
void rte_member_free(struct rte_member_setsum *setsum)
int rte_member_lookup_multi(const struct rte_member_setsum *setsum, const void *key, uint32_t max_match_per_key, member_set_t *set_id)
void rte_member_reset(const struct rte_member_setsum *setsum)
int rte_member_lookup_multi_bulk(const struct rte_member_setsum *setsum, const void **keys, uint32_t num_keys, uint32_t max_match_per_key, uint32_t *match_count, member_set_t *set_ids)
int rte_member_add_byte_count(const struct rte_member_setsum *setsum, const void *key, uint32_t byte_count)
rte_member_setsum_type
Definition: rte_member.h:105
@ RTE_MEMBER_TYPE_VBF
Definition: rte_member.h:107
@ RTE_MEMBER_TYPE_HT
Definition: rte_member.h:106
const char * name
Definition: rte_member.h:187