DPDK  23.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 #ifdef __cplusplus
58 extern "C" {
59 #endif
60 
61 #include <stdint.h>
62 #include <stdbool.h>
63 #include <inttypes.h>
64 
65 #include <rte_common.h>
66 
68 typedef uint16_t member_set_t;
70 #define RTE_MEMBER_NO_MATCH 0
72 #define RTE_MEMBER_ENTRIES_MAX (1 << 30)
74 #define RTE_MEMBER_LOOKUP_BULK_MAX 64
76 #define RTE_MEMBER_BUCKET_ENTRIES 16
78 #define RTE_MEMBER_NAMESIZE 32
80 #define RTE_RAND_MAX ~0LLU
90 #define RTE_MEMBER_SKETCH_ALWAYS_BOUNDED 0x01
92 #define RTE_MEMBER_SKETCH_COUNT_BYTE 0x02
93 
95 #if defined(RTE_ARCH_X86) || defined(__ARM_FEATURE_CRC32)
96 #include <rte_hash_crc.h>
97 #define MEMBER_HASH_FUNC rte_hash_crc
98 #else
99 #include <rte_jhash.h>
100 #define MEMBER_HASH_FUNC rte_jhash
101 #endif
102 
103 extern int librte_member_logtype;
104 
105 #define RTE_MEMBER_LOG(level, ...) \
106  rte_log(RTE_LOG_ ## level, \
107  librte_member_logtype, \
108  RTE_FMT("%s(): " RTE_FMT_HEAD(__VA_ARGS__,), \
109  __func__, \
110  RTE_FMT_TAIL(__VA_ARGS__,)))
111 
113 struct rte_member_setsum;
114 
118 struct rte_member_parameters;
119 
126  RTE_MEMBER_TYPE_SKETCH,
127  RTE_MEMBER_NUM_TYPE
128 };
129 
131 enum rte_member_sig_compare_function {
132  RTE_MEMBER_COMPARE_SCALAR = 0,
133  RTE_MEMBER_COMPARE_AVX2,
134  RTE_MEMBER_COMPARE_NUM
135 };
136 
137 /* sketch update function with different implementations. */
138 typedef void (*sketch_update_fn_t)(const struct rte_member_setsum *ss,
139  const void *key,
140  uint32_t count);
141 
142 /* sketch lookup function with different implementations. */
143 typedef uint64_t (*sketch_lookup_fn_t)(const struct rte_member_setsum *ss,
144  const void *key);
145 
146 /* sketch delete function with different implementations. */
147 typedef void (*sketch_delete_fn_t)(const struct rte_member_setsum *ss,
148  const void *key);
149 
151 struct rte_member_setsum {
152  enum rte_member_setsum_type type; /* Type of the set summary. */
153  uint32_t key_len; /* Length of key. */
154  uint32_t prim_hash_seed; /* Primary hash function seed. */
155  uint32_t sec_hash_seed; /* Secondary hash function seed. */
156 
157  /* Hash table based. */
158  uint32_t bucket_cnt; /* Number of buckets. */
159  uint32_t bucket_mask; /* Bit mask to get bucket index. */
160  /* For runtime selecting AVX, scalar, etc for signature comparison. */
161  enum rte_member_sig_compare_function sig_cmp_fn;
162  uint8_t cache; /* If it is cache mode for ht based. */
163 
164  /* Vector bloom filter. */
165  uint32_t num_set; /* Number of set (bf) in vbf. */
166  uint32_t bits; /* Number of bits in each bf. */
167  uint32_t bit_mask; /* Bit mask to get bit location in bf. */
168  uint32_t num_hashes; /* Number of hash values to index bf. */
169 
170  /* Parameters for sketch */
171  float error_rate;
172  float sample_rate;
173  uint32_t num_col;
174  uint32_t num_row;
175  int always_bounded;
176  double converge_thresh;
177  uint32_t topk;
178  uint32_t count_byte;
179  uint64_t *hash_seeds;
180  sketch_update_fn_t sketch_update; /* Pointer to the sketch update function */
181  sketch_lookup_fn_t sketch_lookup; /* Pointer to the sketch lookup function */
182  sketch_delete_fn_t sketch_delete; /* Pointer to the sketch delete function */
183 
184  void *runtime_var;
185  uint32_t mul_shift; /* vbf internal variable used during bit test. */
186  uint32_t div_shift; /* vbf internal variable used during bit test. */
187 
188  void *table; /* This is the handler of hash table or vBF array. */
189 
190 
191  /* Second cache line should start here. */
192  uint32_t socket_id; /* NUMA Socket ID for memory. */
193  char name[RTE_MEMBER_NAMESIZE]; /* Name of this set summary. */
194 #ifdef RTE_ARCH_X86
195  bool use_avx512;
196 #endif
198 
205  const char *name;
218 
238  uint8_t is_cache;
239 
256  uint32_t num_keys;
257 
262  uint32_t key_len;
263 
273  uint32_t num_set;
274 
295 
305  uint32_t prim_hash_seed;
306 
310  uint32_t sec_hash_seed;
311 
317  float error_rate;
318 
324  float sample_rate;
325 
330  uint32_t top_k;
331 
335  uint32_t extra_flag;
336 
337  int socket_id;
339 
350 struct rte_member_setsum *
351 rte_member_find_existing(const char *name);
352 
362 struct rte_member_setsum *
364 
378 int
379 rte_member_lookup(const struct rte_member_setsum *setsum, const void *key,
380  member_set_t *set_id);
381 
399 int
400 rte_member_lookup_bulk(const struct rte_member_setsum *setsum,
401  const void **keys, uint32_t num_keys,
402  member_set_t *set_ids);
403 
425 int
426 rte_member_lookup_multi(const struct rte_member_setsum *setsum,
427  const void *key, uint32_t max_match_per_key,
428  member_set_t *set_id);
429 
453 int
454 rte_member_lookup_multi_bulk(const struct rte_member_setsum *setsum,
455  const void **keys, uint32_t num_keys,
456  uint32_t max_match_per_key,
457  uint32_t *match_count,
458  member_set_t *set_ids);
459 
486 int
487 rte_member_add(const struct rte_member_setsum *setsum, const void *key,
488  member_set_t set_id);
489 
502 int
503 rte_member_add_byte_count(const struct rte_member_setsum *setsum,
504  const void *key, uint32_t byte_count);
505 
518 int
519 rte_member_query_count(const struct rte_member_setsum *setsum,
520  const void *key, uint64_t *count);
521 
522 
536 int
537 rte_member_report_heavyhitter(const struct rte_member_setsum *setsum,
538  void **keys, uint64_t *counts);
539 
540 
548 void
549 rte_member_free(struct rte_member_setsum *setsum);
550 
558 void
559 rte_member_reset(const struct rte_member_setsum *setsum);
560 
576 int
577 rte_member_delete(const struct rte_member_setsum *setsum, const void *key,
578  member_set_t set_id);
579 
580 #ifdef __cplusplus
581 }
582 #endif
583 
584 #endif /* _RTE_MEMBER_H_ */
#define __rte_cache_aligned
Definition: rte_common.h:524
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)
int rte_member_lookup(const struct rte_member_setsum *setsum, const void *key, member_set_t *set_id)
int rte_member_delete(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)
struct rte_member_setsum * rte_member_create(const struct rte_member_parameters *params)
uint16_t member_set_t
Definition: rte_member.h:68
#define RTE_MEMBER_NAMESIZE
Definition: rte_member.h:78
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:123
@ RTE_MEMBER_TYPE_VBF
Definition: rte_member.h:125
@ RTE_MEMBER_TYPE_HT
Definition: rte_member.h:124
const char * name
Definition: rte_member.h:205
enum rte_member_setsum_type type
Definition: rte_member.h:217