FD.io VPP  v17.04.2-2-ga8f93f8
Vector Packet Processing
lbhash.h File Reference
+ Include dependency graph for lbhash.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  lb_hash_bucket_t
 
struct  lb_hash_t
 

Macros

#define LBHASH_ENTRY_PER_BUCKET   4
 vppinfra already includes tons of different hash tables. More...
 
#define LB_HASH_DO_NOT_USE_SSE_BUCKETS   0
 
#define lb_hash_nbuckets(h)   (((h)->buckets_mask) + 1)
 
#define lb_hash_size(h)   ((h)->buckets_mask + LBHASH_ENTRY_PER_BUCKET)
 
#define lb_hash_foreach_bucket(h, bucket)
 
#define lb_hash_foreach_entry(h, bucket, i)
 
#define lb_hash_foreach_valid_entry(h, bucket, i, now)
 

Functions

static_always_inline lb_hash_tlb_hash_alloc (u32 buckets, u32 timeout)
 
static_always_inline void lb_hash_free (lb_hash_t *h)
 
static_always_inline u32 lb_hash_hash (u64 k0, u64 k1, u64 k2, u64 k3, u64 k4)
 
static_always_inline void lb_hash_prefetch_bucket (lb_hash_t *ht, u32 hash)
 
static_always_inline void lb_hash_get (lb_hash_t *ht, u32 hash, u32 vip, u32 time_now, u32 *available_index, u32 *found_value)
 
static_always_inline u32 lb_hash_available_value (lb_hash_t *h, u32 hash, u32 available_index)
 
static_always_inline void lb_hash_put (lb_hash_t *h, u32 hash, u32 value, u32 vip, u32 available_index, u32 time_now)
 
static_always_inline u32 lb_hash_elts (lb_hash_t *h, u32 time_now)
 

Macro Definition Documentation

#define LB_HASH_DO_NOT_USE_SSE_BUCKETS   0

Definition at line 43 of file lbhash.h.

#define lb_hash_foreach_bucket (   h,
  bucket 
)
Value:
for (bucket = (h)->buckets; \
bucket < (h)->buckets + lb_hash_nbuckets(h); \
bucket++)
#define lb_hash_nbuckets(h)
Definition: lbhash.h:63
vec_header_t h
Definition: buffer.c:275

Definition at line 66 of file lbhash.h.

#define lb_hash_foreach_entry (   h,
  bucket,
  i 
)
Value:
for (i = 0; i < LBHASH_ENTRY_PER_BUCKET; i++)
sll srl srl sll sra u16x4 i
Definition: vector_sse2.h:343
#define LBHASH_ENTRY_PER_BUCKET
vppinfra already includes tons of different hash tables.
Definition: lbhash.h:41
#define lb_hash_foreach_bucket(h, bucket)
Definition: lbhash.h:66
vec_header_t h
Definition: buffer.c:275

Definition at line 71 of file lbhash.h.

#define lb_hash_foreach_valid_entry (   h,
  bucket,
  i,
  now 
)
Value:
if (!clib_u32_loop_gt((now), bucket->timeout[i]))
sll srl srl sll sra u16x4 i
Definition: vector_sse2.h:343
#define clib_u32_loop_gt(a, b)
32 bits integer comparison for running values.
Definition: util.h:38
#define lb_hash_foreach_entry(h, bucket, i)
Definition: lbhash.h:71
vec_header_t h
Definition: buffer.c:275

Definition at line 75 of file lbhash.h.

#define lb_hash_nbuckets (   h)    (((h)->buckets_mask) + 1)

Definition at line 63 of file lbhash.h.

#define lb_hash_size (   h)    ((h)->buckets_mask + LBHASH_ENTRY_PER_BUCKET)

Definition at line 64 of file lbhash.h.

#define LBHASH_ENTRY_PER_BUCKET   4

vppinfra already includes tons of different hash tables.

MagLev flow table is a bit different. It has to be very efficient for both writing and reading operations. But it does not need to be 100% reliable (write can fail). It also needs to recycle old entries in a lazy way.

This hash table is the most dummy hash table you can do. Fixed total size, fixed bucket size. Advantage is that it could be very efficient (maybe).

Definition at line 41 of file lbhash.h.

Function Documentation

static_always_inline lb_hash_t* lb_hash_alloc ( u32  buckets,
u32  timeout 
)

Definition at line 80 of file lbhash.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static_always_inline u32 lb_hash_available_value ( lb_hash_t h,
u32  hash,
u32  available_index 
)

Definition at line 188 of file lbhash.h.

+ Here is the caller graph for this function:

static_always_inline u32 lb_hash_elts ( lb_hash_t h,
u32  time_now 
)

Definition at line 205 of file lbhash.h.

+ Here is the caller graph for this function:

static_always_inline void lb_hash_free ( lb_hash_t h)

Definition at line 98 of file lbhash.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static_always_inline void lb_hash_get ( lb_hash_t ht,
u32  hash,
u32  vip,
u32  time_now,
u32 available_index,
u32 found_value 
)

Definition at line 133 of file lbhash.h.

+ Here is the caller graph for this function:

static_always_inline u32 lb_hash_hash ( u64  k0,
u64  k1,
u64  k2,
u64  k3,
u64  k4 
)

Definition at line 118 of file lbhash.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static_always_inline void lb_hash_prefetch_bucket ( lb_hash_t ht,
u32  hash 
)

Definition at line 126 of file lbhash.h.

+ Here is the caller graph for this function:

static_always_inline void lb_hash_put ( lb_hash_t h,
u32  hash,
u32  value,
u32  vip,
u32  available_index,
u32  time_now 
)

Definition at line 194 of file lbhash.h.

+ Here is the caller graph for this function: