DPDK 23.11.0
Loading...
Searching...
No Matches
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
58extern "C" {
59#endif
60
61#include <stdint.h>
62#include <stdbool.h>
63#include <inttypes.h>
64
65#include <rte_common.h>
66
68typedef 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
103extern 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
113struct rte_member_setsum;
114
119
126 RTE_MEMBER_TYPE_SKETCH,
127 RTE_MEMBER_NUM_TYPE
128};
129
131enum 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. */
138typedef 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. */
143typedef uint64_t (*sketch_lookup_fn_t)(const struct rte_member_setsum *ss,
144 const void *key);
145
146/* sketch delete function with different implementations. */
147typedef void (*sketch_delete_fn_t)(const struct rte_member_setsum *ss,
148 const void *key);
149
151struct 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
306
311
318
325
330 uint32_t top_k;
331
335 uint32_t extra_flag;
336
339
350struct rte_member_setsum *
351rte_member_find_existing(const char *name);
352
362struct rte_member_setsum *
364
378int
379rte_member_lookup(const struct rte_member_setsum *setsum, const void *key,
380 member_set_t *set_id);
381
399int
400rte_member_lookup_bulk(const struct rte_member_setsum *setsum,
401 const void **keys, uint32_t num_keys,
402 member_set_t *set_ids);
403
425int
426rte_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
453int
454rte_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
486int
487rte_member_add(const struct rte_member_setsum *setsum, const void *key,
488 member_set_t set_id);
489
502int
503rte_member_add_byte_count(const struct rte_member_setsum *setsum,
504 const void *key, uint32_t byte_count);
505
518int
519rte_member_query_count(const struct rte_member_setsum *setsum,
520 const void *key, uint64_t *count);
521
522
536int
537rte_member_report_heavyhitter(const struct rte_member_setsum *setsum,
538 void **keys, uint64_t *counts);
539
540
548void
549rte_member_free(struct rte_member_setsum *setsum);
550
558void
559rte_member_reset(const struct rte_member_setsum *setsum);
560
576int
577rte_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
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_query_count(const struct rte_member_setsum *setsum, const void *key, uint64_t *count)
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)
struct rte_member_setsum * rte_member_create(const struct rte_member_parameters *params)
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: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
enum rte_member_setsum_type type
Definition rte_member.h:217