DPDK 22.11.6
|
#include <stdint.h>
#include <stdbool.h>
#include <inttypes.h>
#include <rte_compat.h>
#include <rte_common.h>
#include <rte_jhash.h>
Go to the source code of this file.
Data Structures | |
struct | rte_member_parameters |
Macros | |
#define | RTE_MEMBER_NO_MATCH 0 |
#define | RTE_MEMBER_ENTRIES_MAX (1 << 30) |
#define | RTE_MEMBER_LOOKUP_BULK_MAX 64 |
#define | RTE_MEMBER_BUCKET_ENTRIES 16 |
#define | RTE_MEMBER_NAMESIZE 32 |
#define | RTE_RAND_MAX ~0LLU |
#define | RTE_MEMBER_SKETCH_ALWAYS_BOUNDED 0x01 |
#define | RTE_MEMBER_SKETCH_COUNT_BYTE 0x02 |
Typedefs | |
typedef uint16_t | member_set_t |
Enumerations | |
enum | rte_member_setsum_type { RTE_MEMBER_TYPE_HT = 0 , RTE_MEMBER_TYPE_VBF , RTE_MEMBER_TYPE_SKETCH , RTE_MEMBER_NUM_TYPE } |
Functions | |
struct rte_member_setsum * | rte_member_find_existing (const char *name) |
struct rte_member_setsum * | rte_member_create (const struct rte_member_parameters *params) |
int | rte_member_lookup (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_multi (const struct rte_member_setsum *setsum, const void *key, uint32_t max_match_per_key, member_set_t *set_id) |
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 (const struct rte_member_setsum *setsum, const void *key, member_set_t set_id) |
__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) |
__rte_experimental int | rte_member_report_heavyhitter (const struct rte_member_setsum *setsum, void **keys, uint64_t *counts) |
void | rte_member_free (struct rte_member_setsum *setsum) |
void | rte_member_reset (const struct rte_member_setsum *setsum) |
int | rte_member_delete (const struct rte_member_setsum *setsum, const void *key, member_set_t set_id) |
RTE Membership Library
The Membership Library is an extension and generalization of a traditional filter (for example Bloom Filter and cuckoo filter) structure that has multiple usages in a variety of workloads and applications. The library is used to test if a key belongs to certain sets. Two types of such "set-summary" structures are implemented: hash-table based (HT) and vector bloom filter (vBF). For HT setsummary, two subtypes or modes are available, cache and non-cache modes. The table below summarize some properties of the different implementations.
Definition in file rte_member.h.
#define RTE_MEMBER_NO_MATCH 0 |
Invalid set ID used to mean no match found.
Definition at line 74 of file rte_member.h.
#define RTE_MEMBER_ENTRIES_MAX (1 << 30) |
Maximum size of hash table that can be created.
Definition at line 76 of file rte_member.h.
#define RTE_MEMBER_LOOKUP_BULK_MAX 64 |
Maximum number of keys that can be searched as a bulk
Definition at line 78 of file rte_member.h.
#define RTE_MEMBER_BUCKET_ENTRIES 16 |
Entry count per bucket in hash table based mode.
Definition at line 80 of file rte_member.h.
#define RTE_MEMBER_NAMESIZE 32 |
Maximum number of characters in setsum name.
Definition at line 82 of file rte_member.h.
#define RTE_RAND_MAX ~0LLU |
Max value of the random number
Definition at line 84 of file rte_member.h.
#define RTE_MEMBER_SKETCH_ALWAYS_BOUNDED 0x01 |
As packets skipped in the sampling-based algorithm, the accounting results accuracy is not guaranteed in the start stage. There should be a "convergence time" to achieve the accuracy after receiving enough packets. For sketch, use the flag if prefer always bounded mode, which only starts sampling after receiving enough packets to keep the results accuracy always bounded.
Definition at line 94 of file rte_member.h.
#define RTE_MEMBER_SKETCH_COUNT_BYTE 0x02 |
For sketch, use the flag if to count packet size instead of packet count
Definition at line 96 of file rte_member.h.
typedef uint16_t member_set_t |
The set ID type that stored internally in hash table based set summary.
Definition at line 72 of file rte_member.h.
Define different set summary types
Enumerator | |
---|---|
RTE_MEMBER_TYPE_HT | Hash table based set summary. |
RTE_MEMBER_TYPE_VBF | Vector of bloom filters. |
Definition at line 133 of file rte_member.h.
struct rte_member_setsum * rte_member_find_existing | ( | const char * | name | ) |
Find an existing set-summary and return a pointer to it.
name | Name of the set-summary. |
struct rte_member_setsum * rte_member_create | ( | const struct rte_member_parameters * | params | ) |
Create set-summary (SS).
params | Parameters to initialize the setsummary. |
int rte_member_lookup | ( | const struct rte_member_setsum * | setsum, |
const void * | key, | ||
member_set_t * | set_id | ||
) |
Lookup key in set-summary (SS). Single key lookup and return as soon as the first match found
setsum | Pointer of a setsummary. |
key | Pointer of the key to be looked up. |
set_id | Output the set id matches the key. |
int rte_member_lookup_bulk | ( | const struct rte_member_setsum * | setsum, |
const void ** | keys, | ||
uint32_t | num_keys, | ||
member_set_t * | set_ids | ||
) |
Lookup bulk of keys in set-summary (SS). Each key lookup returns as soon as the first match found
setsum | Pointer of a setsummary. |
keys | Pointer of the bulk of keys to be looked up. |
num_keys | Number of keys that will be lookup. |
set_ids | Output set ids for all the keys to this array. User should preallocate array that can contain all results, which size is the num_keys. |
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 | ||
) |
Lookup a key in set-summary (SS) for multiple matches. The key lookup will find all matched entries (multiple match). Note that for cache mode of HT, each key can have at most one match. This is because keys with same signature that maps to same bucket will overwrite each other. So multi-match lookup should be used for vBF and non-cache HT.
setsum | Pointer of a set-summary. |
key | Pointer of the key that to be looked up. |
max_match_per_key | User specified maximum number of matches for each key. The function returns as soon as this number of matches found for the key. |
set_id | Output set ids for all the matches of the key. User needs to preallocate the array that can contain max_match_per_key number of results. |
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 | ||
) |
Lookup a bulk of keys in set-summary (SS) for multiple matches each key. Each key lookup will find all matched entries (multiple match). Note that for cache mode HT, each key can have at most one match. So multi-match function is mainly used for vBF and non-cache mode HT.
setsum | Pointer of a setsummary. |
keys | Pointer of the keys to be looked up. |
num_keys | The number of keys that will be lookup. |
max_match_per_key | The possible maximum number of matches for each key. |
match_count | Output the number of matches for each key in an array. |
set_ids | Return set ids for all the matches of all keys. Users pass in a preallocated 2D array with first dimension as key index and second dimension as match index. For example set_ids[bulk_size][max_match_per_key] |
int rte_member_add | ( | const struct rte_member_setsum * | setsum, |
const void * | key, | ||
member_set_t | set_id | ||
) |
Insert key into set-summary (SS).
setsum | Pointer of a set-summary. |
key | Pointer of the key to be added. |
set_id | The set id associated with the key that needs to be added. Different mode supports different set_id ranges. 0 cannot be used as set_id since RTE_MEMBER_NO_MATCH by default is set as 0. For HT mode, the set_id has range as [1, 0x7FFF], MSB is reserved. For vBF mode the set id is limited by the num_set parameter when create the set-summary. For sketch mode, this id is ignored. |
__rte_experimental int rte_member_add_byte_count | ( | const struct rte_member_setsum * | setsum, |
const void * | key, | ||
uint32_t | byte_count | ||
) |
Add the packet byte size into the sketch.
setsum | Pointer of a set-summary. |
key | Pointer of the key to be added. |
byte_count | Add the byte count of the packet into the sketch. |
__rte_experimental int rte_member_query_count | ( | const struct rte_member_setsum * | setsum, |
const void * | key, | ||
uint64_t * | count | ||
) |
Query packet count for a certain flow-key.
setsum | Pointer of a set-summary. |
key | Pointer of the key to be added. |
count | The output packet count or byte count. |
__rte_experimental int rte_member_report_heavyhitter | ( | const struct rte_member_setsum * | setsum, |
void ** | keys, | ||
uint64_t * | counts | ||
) |
Report heavyhitter flow-keys into set-summary (SS).
setsum | Pointer of a set-summary. |
keys | Pointer of the output top-k key array. |
counts | Pointer of the output packet count or byte count array of the top-k keys. |
void rte_member_free | ( | struct rte_member_setsum * | setsum | ) |
De-allocate memory used by set-summary.
setsum | Pointer to the set summary. If setsum is NULL, no operation is performed. |
void rte_member_reset | ( | const struct rte_member_setsum * | setsum | ) |
Reset the set-summary tables. E.g. reset bits to be 0 in BF, reset set_id in each entry to be RTE_MEMBER_NO_MATCH in HT based SS.
setsum | Pointer to the set-summary. |
int rte_member_delete | ( | const struct rte_member_setsum * | setsum, |
const void * | key, | ||
member_set_t | set_id | ||
) |
Delete items from the set-summary. Note that vBF does not support deletion in current implementation. For vBF, error code of -EINVAL will be returned.
setsum | Pointer to the set-summary. |
key | Pointer of the key to be deleted. |
set_id | For HT mode, we need both key and its corresponding set_id to properly delete the key. Without set_id, we may delete other keys with the same signature. |