DPDK 22.11.0-rc2
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
57#ifndef _RTE_MEMBER_H_
58#define _RTE_MEMBER_H_
59
60#ifdef __cplusplus
61extern "C" {
62#endif
63
64#include <stdint.h>
65#include <stdbool.h>
66#include <inttypes.h>
67
68#include <rte_common.h>
69
71typedef uint16_t member_set_t;
73#define RTE_MEMBER_NO_MATCH 0
75#define RTE_MEMBER_ENTRIES_MAX (1 << 30)
77#define RTE_MEMBER_LOOKUP_BULK_MAX 64
79#define RTE_MEMBER_BUCKET_ENTRIES 16
81#define RTE_MEMBER_NAMESIZE 32
83#define RTE_RAND_MAX ~0LLU
93#define RTE_MEMBER_SKETCH_ALWAYS_BOUNDED 0x01
95#define RTE_MEMBER_SKETCH_COUNT_BYTE 0x02
96
98#if defined(RTE_ARCH_X86) || defined(__ARM_FEATURE_CRC32)
99#include <rte_hash_crc.h>
100#define MEMBER_HASH_FUNC rte_hash_crc
101#else
102#include <rte_jhash.h>
103#define MEMBER_HASH_FUNC rte_jhash
104#endif
105
106extern int librte_member_logtype;
107
108#define RTE_MEMBER_LOG(level, ...) \
109 rte_log(RTE_LOG_ ## level, \
110 librte_member_logtype, \
111 RTE_FMT("%s(): " RTE_FMT_HEAD(__VA_ARGS__,), \
112 __func__, \
113 RTE_FMT_TAIL(__VA_ARGS__,)))
114
116struct rte_member_setsum;
117
125
135 RTE_MEMBER_TYPE_SKETCH,
136 RTE_MEMBER_NUM_TYPE
137};
138
140enum rte_member_sig_compare_function {
141 RTE_MEMBER_COMPARE_SCALAR = 0,
142 RTE_MEMBER_COMPARE_AVX2,
143 RTE_MEMBER_COMPARE_NUM
144};
145
146/* sketch update function with different implementations. */
147typedef void (*sketch_update_fn_t)(const struct rte_member_setsum *ss,
148 const void *key,
149 uint32_t count);
150
151/* sketch lookup function with different implementations. */
152typedef uint64_t (*sketch_lookup_fn_t)(const struct rte_member_setsum *ss,
153 const void *key);
154
155/* sketch delete function with different implementations. */
156typedef void (*sketch_delete_fn_t)(const struct rte_member_setsum *ss,
157 const void *key);
158
160struct rte_member_setsum {
161 enum rte_member_setsum_type type; /* Type of the set summary. */
162 uint32_t key_len; /* Length of key. */
163 uint32_t prim_hash_seed; /* Primary hash function seed. */
164 uint32_t sec_hash_seed; /* Secondary hash function seed. */
165
166 /* Hash table based. */
167 uint32_t bucket_cnt; /* Number of buckets. */
168 uint32_t bucket_mask; /* Bit mask to get bucket index. */
169 /* For runtime selecting AVX, scalar, etc for signature comparison. */
170 enum rte_member_sig_compare_function sig_cmp_fn;
171 uint8_t cache; /* If it is cache mode for ht based. */
172
173 /* Vector bloom filter. */
174 uint32_t num_set; /* Number of set (bf) in vbf. */
175 uint32_t bits; /* Number of bits in each bf. */
176 uint32_t bit_mask; /* Bit mask to get bit location in bf. */
177 uint32_t num_hashes; /* Number of hash values to index bf. */
178
179 /* Parameters for sketch */
180 float error_rate;
181 float sample_rate;
182 uint32_t num_col;
183 uint32_t num_row;
184 int always_bounded;
185 double converge_thresh;
186 uint32_t topk;
187 uint32_t count_byte;
188 uint64_t *hash_seeds;
189 sketch_update_fn_t sketch_update; /* Pointer to the sketch update function */
190 sketch_lookup_fn_t sketch_lookup; /* Pointer to the sketch lookup function */
191 sketch_delete_fn_t sketch_delete; /* Pointer to the sketch delete function */
192
193 void *runtime_var;
194 uint32_t mul_shift; /* vbf internal variable used during bit test. */
195 uint32_t div_shift; /* vbf internal variable used during bit test. */
196
197 void *table; /* This is the handler of hash table or vBF array. */
198
199
200 /* Second cache line should start here. */
201 uint32_t socket_id; /* NUMA Socket ID for memory. */
202 char name[RTE_MEMBER_NAMESIZE]; /* Name of this set summary. */
203#ifdef RTE_ARCH_X86
204 bool use_avx512;
205#endif
207
218 const char *name;
231
251 uint8_t is_cache;
252
269 uint32_t num_keys;
270
275 uint32_t key_len;
276
286 uint32_t num_set;
287
308
318
323
330
337
342 uint32_t top_k;
343
347 uint32_t extra_flag;
348
351
365struct rte_member_setsum *
366rte_member_find_existing(const char *name);
367
380struct rte_member_setsum *
382
399int
400rte_member_lookup(const struct rte_member_setsum *setsum, const void *key,
401 member_set_t *set_id);
402
423int
424rte_member_lookup_bulk(const struct rte_member_setsum *setsum,
425 const void **keys, uint32_t num_keys,
426 member_set_t *set_ids);
427
452int
453rte_member_lookup_multi(const struct rte_member_setsum *setsum,
454 const void *key, uint32_t max_match_per_key,
455 member_set_t *set_id);
456
483int
484rte_member_lookup_multi_bulk(const struct rte_member_setsum *setsum,
485 const void **keys, uint32_t num_keys,
486 uint32_t max_match_per_key,
487 uint32_t *match_count,
488 member_set_t *set_ids);
489
519int
520rte_member_add(const struct rte_member_setsum *setsum, const void *key,
521 member_set_t set_id);
522
538__rte_experimental
539int
540rte_member_add_byte_count(const struct rte_member_setsum *setsum,
541 const void *key, uint32_t byte_count);
542
558__rte_experimental
559int
560rte_member_query_count(const struct rte_member_setsum *setsum,
561 const void *key, uint64_t *count);
562
563
580__rte_experimental
581int
582rte_member_report_heavyhitter(const struct rte_member_setsum *setsum,
583 void **keys, uint64_t *counts);
584
585
596void
597rte_member_free(struct rte_member_setsum *setsum);
598
609void
610rte_member_reset(const struct rte_member_setsum *setsum);
611
630int
631rte_member_delete(const struct rte_member_setsum *setsum, const void *key,
632 member_set_t set_id);
633
634#ifdef __cplusplus
635}
636#endif
637
638#endif /* _RTE_MEMBER_H_ */
#define __rte_cache_aligned
Definition: rte_common.h:440
struct rte_member_setsum * rte_member_find_existing(const char *name)
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_lookup(const struct rte_member_setsum *setsum, const void *key, member_set_t *set_id)
__rte_experimental int rte_member_report_heavyhitter(const struct rte_member_setsum *setsum, void **keys, uint64_t *counts)
int rte_member_delete(const struct rte_member_setsum *setsum, const void *key, member_set_t set_id)
struct rte_member_setsum * rte_member_create(const struct rte_member_parameters *params)
__rte_experimental int rte_member_add_byte_count(const struct rte_member_setsum *setsum, const void *key, uint32_t byte_count)
__rte_experimental int rte_member_query_count(const struct rte_member_setsum *setsum, const void *key, uint64_t *count)
uint16_t member_set_t
Definition: rte_member.h:71
#define RTE_MEMBER_NAMESIZE
Definition: rte_member.h:81
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)
rte_member_setsum_type
Definition: rte_member.h:132
@ RTE_MEMBER_TYPE_VBF
Definition: rte_member.h:134
@ RTE_MEMBER_TYPE_HT
Definition: rte_member.h:133
const char * name
Definition: rte_member.h:218
enum rte_member_setsum_type type
Definition: rte_member.h:230