table: remove deprecated 8-byte key hash tables

The non-dosig version of the 8-byte key hash tables (both extendable
bucket and LRU) are removed. The remaining hash tables are renamed to
eliminate the dosig particle from their name.

Signed-off-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
This commit is contained in:
Cristian Dumitrescu 2017-10-18 16:03:38 +01:00
parent 8524dcb91c
commit 4f1c1fa142
7 changed files with 21 additions and 358 deletions

View File

@ -542,7 +542,7 @@ static void *pipeline_fc_init(struct pipeline_params *params,
switch (p_fc->key_size) {
case 8:
table_params.ops = &rte_table_hash_key8_ext_dosig_ops;
table_params.ops = &rte_table_hash_key8_ext_ops;
table_params.arg_create = &table_hash_key8_params;
break;

View File

@ -1359,7 +1359,7 @@ pipeline_routing_init(struct pipeline_params *params,
};
struct rte_pipeline_table_params table_params = {
.ops = &rte_table_hash_key8_ext_dosig_ops,
.ops = &rte_table_hash_key8_ext_ops,
.arg_create = &table_arp_params,
.f_action_hit = get_arp_table_ah_hit(p_rt),
.f_action_miss = NULL,

View File

@ -201,12 +201,8 @@ struct rte_table_hash_key8_lru_params {
uint8_t *key_mask;
};
/** LRU hash table operations for pre-computed key signature */
extern struct rte_table_ops rte_table_hash_key8_lru_ops;
/** LRU hash table operations for key signature computed on lookup ("do-sig") */
extern struct rte_table_ops rte_table_hash_key8_lru_dosig_ops;
/** Extendible bucket hash table parameters */
struct rte_table_hash_key8_ext_params {
/** Maximum number of entries (and keys) in the table */
@ -234,13 +230,8 @@ struct rte_table_hash_key8_ext_params {
uint8_t *key_mask;
};
/** Extendible bucket hash table operations for pre-computed key signature */
extern struct rte_table_ops rte_table_hash_key8_ext_ops;
/** Extendible bucket hash table operations for key signature computed on
lookup ("do-sig") */
extern struct rte_table_ops rte_table_hash_key8_ext_dosig_ops;
/**
* 16-byte key hash tables
*

View File

@ -582,18 +582,6 @@ rte_table_hash_entry_delete_key8_ext(
}
#define lookup1_stage1(mbuf1, bucket1, f) \
{ \
uint64_t signature; \
uint32_t bucket_index; \
\
signature = RTE_MBUF_METADATA_UINT32(mbuf1, f->signature_offset);\
bucket_index = signature & (f->n_buckets - 1); \
bucket1 = (struct rte_bucket_4_8 *) \
&f->memory[bucket_index * f->bucket_size]; \
rte_prefetch0(bucket1); \
}
#define lookup1_stage1_dosig(mbuf1, bucket1, f) \
{ \
uint64_t *key; \
uint64_t signature; \
@ -738,25 +726,7 @@ rte_table_hash_entry_delete_key8_ext(
rte_prefetch0(RTE_MBUF_METADATA_UINT8_PTR(mbuf01, key_offset));\
}
#define lookup2_stage1(mbuf10, mbuf11, bucket10, bucket11, f) \
{ \
uint64_t signature10, signature11; \
uint32_t bucket10_index, bucket11_index; \
\
signature10 = RTE_MBUF_METADATA_UINT32(mbuf10, f->signature_offset);\
bucket10_index = signature10 & (f->n_buckets - 1); \
bucket10 = (struct rte_bucket_4_8 *) \
&f->memory[bucket10_index * f->bucket_size]; \
rte_prefetch0(bucket10); \
\
signature11 = RTE_MBUF_METADATA_UINT32(mbuf11, f->signature_offset);\
bucket11_index = signature11 & (f->n_buckets - 1); \
bucket11 = (struct rte_bucket_4_8 *) \
&f->memory[bucket11_index * f->bucket_size]; \
rte_prefetch0(bucket11); \
}
#define lookup2_stage1_dosig(mbuf10, mbuf11, bucket10, bucket11, f)\
#define lookup2_stage1(mbuf10, mbuf11, bucket10, bucket11, f)\
{ \
uint64_t *key10, *key11; \
uint64_t hash_offset_buffer10; \
@ -871,8 +841,8 @@ rte_table_hash_lookup_key8_lru(
struct rte_table_hash *f = (struct rte_table_hash *) table;
struct rte_bucket_4_8 *bucket10, *bucket11, *bucket20, *bucket21;
struct rte_mbuf *mbuf00, *mbuf01, *mbuf10, *mbuf11, *mbuf20, *mbuf21;
uint32_t pkt00_index, pkt01_index, pkt10_index,
pkt11_index, pkt20_index, pkt21_index;
uint32_t pkt00_index, pkt01_index, pkt10_index;
uint32_t pkt11_index, pkt20_index, pkt21_index;
uint64_t pkts_mask_out = 0;
__rte_unused uint32_t n_pkts_in = __builtin_popcountll(pkts_mask);
@ -888,7 +858,7 @@ rte_table_hash_lookup_key8_lru(
lookup1_stage0(pkt_index, mbuf, pkts, pkts_mask, f);
lookup1_stage1(mbuf, bucket, f);
lookup1_stage2_lru(pkt_index, mbuf, bucket,
pkts_mask_out, entries, f);
pkts_mask_out, entries, f);
}
*lookup_hit_mask = pkts_mask_out;
@ -986,132 +956,6 @@ rte_table_hash_lookup_key8_lru(
return 0;
} /* rte_table_hash_lookup_key8_lru() */
static int
rte_table_hash_lookup_key8_lru_dosig(
void *table,
struct rte_mbuf **pkts,
uint64_t pkts_mask,
uint64_t *lookup_hit_mask,
void **entries)
{
struct rte_table_hash *f = (struct rte_table_hash *) table;
struct rte_bucket_4_8 *bucket10, *bucket11, *bucket20, *bucket21;
struct rte_mbuf *mbuf00, *mbuf01, *mbuf10, *mbuf11, *mbuf20, *mbuf21;
uint32_t pkt00_index, pkt01_index, pkt10_index;
uint32_t pkt11_index, pkt20_index, pkt21_index;
uint64_t pkts_mask_out = 0;
__rte_unused uint32_t n_pkts_in = __builtin_popcountll(pkts_mask);
RTE_TABLE_HASH_KEY8_STATS_PKTS_IN_ADD(f, n_pkts_in);
/* Cannot run the pipeline with less than 5 packets */
if (__builtin_popcountll(pkts_mask) < 5) {
for ( ; pkts_mask; ) {
struct rte_bucket_4_8 *bucket;
struct rte_mbuf *mbuf;
uint32_t pkt_index;
lookup1_stage0(pkt_index, mbuf, pkts, pkts_mask, f);
lookup1_stage1_dosig(mbuf, bucket, f);
lookup1_stage2_lru(pkt_index, mbuf, bucket,
pkts_mask_out, entries, f);
}
*lookup_hit_mask = pkts_mask_out;
RTE_TABLE_HASH_KEY8_STATS_PKTS_LOOKUP_MISS(f, n_pkts_in - __builtin_popcountll(pkts_mask_out));
return 0;
}
/*
* Pipeline fill
*
*/
/* Pipeline stage 0 */
lookup2_stage0(pkt00_index, pkt01_index, mbuf00, mbuf01, pkts,
pkts_mask, f);
/* Pipeline feed */
mbuf10 = mbuf00;
mbuf11 = mbuf01;
pkt10_index = pkt00_index;
pkt11_index = pkt01_index;
/* Pipeline stage 0 */
lookup2_stage0(pkt00_index, pkt01_index, mbuf00, mbuf01, pkts,
pkts_mask, f);
/* Pipeline stage 1 */
lookup2_stage1_dosig(mbuf10, mbuf11, bucket10, bucket11, f);
/*
* Pipeline run
*
*/
for ( ; pkts_mask; ) {
/* Pipeline feed */
bucket20 = bucket10;
bucket21 = bucket11;
mbuf20 = mbuf10;
mbuf21 = mbuf11;
mbuf10 = mbuf00;
mbuf11 = mbuf01;
pkt20_index = pkt10_index;
pkt21_index = pkt11_index;
pkt10_index = pkt00_index;
pkt11_index = pkt01_index;
/* Pipeline stage 0 */
lookup2_stage0_with_odd_support(pkt00_index, pkt01_index,
mbuf00, mbuf01, pkts, pkts_mask, f);
/* Pipeline stage 1 */
lookup2_stage1_dosig(mbuf10, mbuf11, bucket10, bucket11, f);
/* Pipeline stage 2 */
lookup2_stage2_lru(pkt20_index, pkt21_index, mbuf20, mbuf21,
bucket20, bucket21, pkts_mask_out, entries, f);
}
/*
* Pipeline flush
*
*/
/* Pipeline feed */
bucket20 = bucket10;
bucket21 = bucket11;
mbuf20 = mbuf10;
mbuf21 = mbuf11;
mbuf10 = mbuf00;
mbuf11 = mbuf01;
pkt20_index = pkt10_index;
pkt21_index = pkt11_index;
pkt10_index = pkt00_index;
pkt11_index = pkt01_index;
/* Pipeline stage 1 */
lookup2_stage1_dosig(mbuf10, mbuf11, bucket10, bucket11, f);
/* Pipeline stage 2 */
lookup2_stage2_lru(pkt20_index, pkt21_index, mbuf20, mbuf21,
bucket20, bucket21, pkts_mask_out, entries, f);
/* Pipeline feed */
bucket20 = bucket10;
bucket21 = bucket11;
mbuf20 = mbuf10;
mbuf21 = mbuf11;
pkt20_index = pkt10_index;
pkt21_index = pkt11_index;
/* Pipeline stage 2 */
lookup2_stage2_lru(pkt20_index, pkt21_index, mbuf20, mbuf21,
bucket20, bucket21, pkts_mask_out, entries, f);
*lookup_hit_mask = pkts_mask_out;
RTE_TABLE_HASH_KEY8_STATS_PKTS_LOOKUP_MISS(f, n_pkts_in - __builtin_popcountll(pkts_mask_out));
return 0;
} /* rte_table_hash_lookup_key8_lru_dosig() */
static int
rte_table_hash_lookup_key8_ext(
void *table,
@ -1142,8 +986,8 @@ rte_table_hash_lookup_key8_ext(
lookup1_stage0(pkt_index, mbuf, pkts, pkts_mask, f);
lookup1_stage1(mbuf, bucket, f);
lookup1_stage2_ext(pkt_index, mbuf, bucket,
pkts_mask_out, entries, buckets_mask, buckets,
keys, f);
pkts_mask_out, entries, buckets_mask,
buckets, keys, f);
}
goto grind_next_buckets;
@ -1262,156 +1106,6 @@ grind_next_buckets:
return 0;
} /* rte_table_hash_lookup_key8_ext() */
static int
rte_table_hash_lookup_key8_ext_dosig(
void *table,
struct rte_mbuf **pkts,
uint64_t pkts_mask,
uint64_t *lookup_hit_mask,
void **entries)
{
struct rte_table_hash *f = (struct rte_table_hash *) table;
struct rte_bucket_4_8 *bucket10, *bucket11, *bucket20, *bucket21;
struct rte_mbuf *mbuf00, *mbuf01, *mbuf10, *mbuf11, *mbuf20, *mbuf21;
uint32_t pkt00_index, pkt01_index, pkt10_index;
uint32_t pkt11_index, pkt20_index, pkt21_index;
uint64_t pkts_mask_out = 0, buckets_mask = 0;
struct rte_bucket_4_8 *buckets[RTE_PORT_IN_BURST_SIZE_MAX];
uint64_t *keys[RTE_PORT_IN_BURST_SIZE_MAX];
__rte_unused uint32_t n_pkts_in = __builtin_popcountll(pkts_mask);
RTE_TABLE_HASH_KEY8_STATS_PKTS_IN_ADD(f, n_pkts_in);
/* Cannot run the pipeline with less than 5 packets */
if (__builtin_popcountll(pkts_mask) < 5) {
for ( ; pkts_mask; ) {
struct rte_bucket_4_8 *bucket;
struct rte_mbuf *mbuf;
uint32_t pkt_index;
lookup1_stage0(pkt_index, mbuf, pkts, pkts_mask, f);
lookup1_stage1_dosig(mbuf, bucket, f);
lookup1_stage2_ext(pkt_index, mbuf, bucket,
pkts_mask_out, entries, buckets_mask,
buckets, keys, f);
}
goto grind_next_buckets;
}
/*
* Pipeline fill
*
*/
/* Pipeline stage 0 */
lookup2_stage0(pkt00_index, pkt01_index, mbuf00, mbuf01, pkts,
pkts_mask, f);
/* Pipeline feed */
mbuf10 = mbuf00;
mbuf11 = mbuf01;
pkt10_index = pkt00_index;
pkt11_index = pkt01_index;
/* Pipeline stage 0 */
lookup2_stage0(pkt00_index, pkt01_index, mbuf00, mbuf01, pkts,
pkts_mask, f);
/* Pipeline stage 1 */
lookup2_stage1_dosig(mbuf10, mbuf11, bucket10, bucket11, f);
/*
* Pipeline run
*
*/
for ( ; pkts_mask; ) {
/* Pipeline feed */
bucket20 = bucket10;
bucket21 = bucket11;
mbuf20 = mbuf10;
mbuf21 = mbuf11;
mbuf10 = mbuf00;
mbuf11 = mbuf01;
pkt20_index = pkt10_index;
pkt21_index = pkt11_index;
pkt10_index = pkt00_index;
pkt11_index = pkt01_index;
/* Pipeline stage 0 */
lookup2_stage0_with_odd_support(pkt00_index, pkt01_index,
mbuf00, mbuf01, pkts, pkts_mask, f);
/* Pipeline stage 1 */
lookup2_stage1_dosig(mbuf10, mbuf11, bucket10, bucket11, f);
/* Pipeline stage 2 */
lookup2_stage2_ext(pkt20_index, pkt21_index, mbuf20, mbuf21,
bucket20, bucket21, pkts_mask_out, entries,
buckets_mask, buckets, keys, f);
}
/*
* Pipeline flush
*
*/
/* Pipeline feed */
bucket20 = bucket10;
bucket21 = bucket11;
mbuf20 = mbuf10;
mbuf21 = mbuf11;
mbuf10 = mbuf00;
mbuf11 = mbuf01;
pkt20_index = pkt10_index;
pkt21_index = pkt11_index;
pkt10_index = pkt00_index;
pkt11_index = pkt01_index;
/* Pipeline stage 1 */
lookup2_stage1_dosig(mbuf10, mbuf11, bucket10, bucket11, f);
/* Pipeline stage 2 */
lookup2_stage2_ext(pkt20_index, pkt21_index, mbuf20, mbuf21,
bucket20, bucket21, pkts_mask_out, entries,
buckets_mask, buckets, keys, f);
/* Pipeline feed */
bucket20 = bucket10;
bucket21 = bucket11;
mbuf20 = mbuf10;
mbuf21 = mbuf11;
pkt20_index = pkt10_index;
pkt21_index = pkt11_index;
/* Pipeline stage 2 */
lookup2_stage2_ext(pkt20_index, pkt21_index, mbuf20, mbuf21,
bucket20, bucket21, pkts_mask_out, entries,
buckets_mask, buckets, keys, f);
grind_next_buckets:
/* Grind next buckets */
for ( ; buckets_mask; ) {
uint64_t buckets_mask_next = 0;
for ( ; buckets_mask; ) {
uint64_t pkt_mask;
uint32_t pkt_index;
pkt_index = __builtin_ctzll(buckets_mask);
pkt_mask = 1LLU << pkt_index;
buckets_mask &= ~pkt_mask;
lookup_grinder(pkt_index, buckets, keys, pkts_mask_out,
entries, buckets_mask_next, f);
}
buckets_mask = buckets_mask_next;
}
*lookup_hit_mask = pkts_mask_out;
RTE_TABLE_HASH_KEY8_STATS_PKTS_LOOKUP_MISS(f, n_pkts_in - __builtin_popcountll(pkts_mask_out));
return 0;
} /* rte_table_hash_lookup_key8_dosig_ext() */
static int
rte_table_hash_key8_stats_read(void *table, struct rte_table_stats *stats, int clear)
{
@ -1437,17 +1131,6 @@ struct rte_table_ops rte_table_hash_key8_lru_ops = {
.f_stats = rte_table_hash_key8_stats_read,
};
struct rte_table_ops rte_table_hash_key8_lru_dosig_ops = {
.f_create = rte_table_hash_create_key8_lru,
.f_free = rte_table_hash_free_key8_lru,
.f_add = rte_table_hash_entry_add_key8_lru,
.f_delete = rte_table_hash_entry_delete_key8_lru,
.f_add_bulk = NULL,
.f_delete_bulk = NULL,
.f_lookup = rte_table_hash_lookup_key8_lru_dosig,
.f_stats = rte_table_hash_key8_stats_read,
};
struct rte_table_ops rte_table_hash_key8_ext_ops = {
.f_create = rte_table_hash_create_key8_ext,
.f_free = rte_table_hash_free_key8_ext,
@ -1458,14 +1141,3 @@ struct rte_table_ops rte_table_hash_key8_ext_ops = {
.f_lookup = rte_table_hash_lookup_key8_ext,
.f_stats = rte_table_hash_key8_stats_read,
};
struct rte_table_ops rte_table_hash_key8_ext_dosig_ops = {
.f_create = rte_table_hash_create_key8_ext,
.f_free = rte_table_hash_free_key8_ext,
.f_add = rte_table_hash_entry_add_key8_ext,
.f_delete = rte_table_hash_entry_delete_key8_ext,
.f_add_bulk = NULL,
.f_delete_bulk = NULL,
.f_lookup = rte_table_hash_lookup_key8_ext_dosig,
.f_stats = rte_table_hash_key8_stats_read,
};

View File

@ -241,7 +241,7 @@ app_main_loop_worker_pipeline_hash(void) {
};
struct rte_pipeline_table_params table_params = {
.ops = &rte_table_hash_key8_ext_dosig_ops,
.ops = &rte_table_hash_key8_ext_ops,
.arg_create = &table_hash_params,
.f_action_hit = NULL,
.f_action_miss = NULL,
@ -266,7 +266,7 @@ app_main_loop_worker_pipeline_hash(void) {
};
struct rte_pipeline_table_params table_params = {
.ops = &rte_table_hash_key8_lru_dosig_ops,
.ops = &rte_table_hash_key8_lru_ops,
.arg_create = &table_hash_params,
.f_action_hit = NULL,
.f_action_miss = NULL,

View File

@ -469,7 +469,7 @@ test_table_hash8lru(void)
table_packets.n_hit_packets = 50;
table_packets.n_miss_packets = 50;
status = test_table_type(&rte_table_hash_key8_lru_dosig_ops,
status = test_table_type(&rte_table_hash_key8_lru_ops,
(void *)&key8lru_params, (void *)key8lru, &table_packets,
NULL, 0);
VERIFY(status, CHECK_TABLE_OK);
@ -477,7 +477,7 @@ test_table_hash8lru(void)
/* Invalid parameters */
key8lru_params.n_entries = 0;
status = test_table_type(&rte_table_hash_key8_lru_dosig_ops,
status = test_table_type(&rte_table_hash_key8_lru_ops,
(void *)&key8lru_params, (void *)key8lru, &table_packets,
NULL, 0);
VERIFY(status, CHECK_TABLE_TABLE_CONFIG);
@ -485,7 +485,7 @@ test_table_hash8lru(void)
key8lru_params.n_entries = 1<<16;
key8lru_params.f_hash = NULL;
status = test_table_type(&rte_table_hash_key8_lru_dosig_ops,
status = test_table_type(&rte_table_hash_key8_lru_ops,
(void *)&key8lru_params, (void *)key8lru, &table_packets,
NULL, 0);
VERIFY(status, CHECK_TABLE_TABLE_CONFIG);
@ -646,7 +646,7 @@ test_table_hash8ext(void)
table_packets.n_hit_packets = 50;
table_packets.n_miss_packets = 50;
status = test_table_type(&rte_table_hash_key8_ext_dosig_ops,
status = test_table_type(&rte_table_hash_key8_ext_ops,
(void *)&key8ext_params, (void *)key8ext, &table_packets,
NULL, 0);
VERIFY(status, CHECK_TABLE_OK);
@ -654,7 +654,7 @@ test_table_hash8ext(void)
/* Invalid parameters */
key8ext_params.n_entries = 0;
status = test_table_type(&rte_table_hash_key8_ext_dosig_ops,
status = test_table_type(&rte_table_hash_key8_ext_ops,
(void *)&key8ext_params, (void *)key8ext, &table_packets,
NULL, 0);
VERIFY(status, CHECK_TABLE_TABLE_CONFIG);
@ -662,7 +662,7 @@ test_table_hash8ext(void)
key8ext_params.n_entries = 1<<16;
key8ext_params.f_hash = NULL;
status = test_table_type(&rte_table_hash_key8_ext_dosig_ops,
status = test_table_type(&rte_table_hash_key8_ext_ops,
(void *)&key8ext_params, (void *)key8ext, &table_packets,
NULL, 0);
VERIFY(status, CHECK_TABLE_TABLE_CONFIG);
@ -670,7 +670,7 @@ test_table_hash8ext(void)
key8ext_params.f_hash = pipeline_test_hash;
key8ext_params.n_entries_ext = 0;
status = test_table_type(&rte_table_hash_key8_ext_dosig_ops,
status = test_table_type(&rte_table_hash_key8_ext_ops,
(void *)&key8ext_params, (void *)key8ext, &table_packets, NULL, 0);
VERIFY(status, CHECK_TABLE_TABLE_CONFIG);

View File

@ -895,12 +895,12 @@ test_table_hash_lru(void)
{
int status;
status = test_table_hash_lru_generic(&rte_table_hash_key8_lru_dosig_ops);
status = test_table_hash_lru_generic(&rte_table_hash_key8_lru_ops);
if (status < 0)
return status;
status = test_table_hash_lru_generic(
&rte_table_hash_key8_lru_dosig_ops);
&rte_table_hash_key8_lru_ops);
if (status < 0)
return status;
@ -924,12 +924,12 @@ test_table_hash_ext(void)
{
int status;
status = test_table_hash_ext_generic(&rte_table_hash_key8_ext_dosig_ops);
status = test_table_hash_ext_generic(&rte_table_hash_key8_ext_ops);
if (status < 0)
return status;
status = test_table_hash_ext_generic(
&rte_table_hash_key8_ext_dosig_ops);
&rte_table_hash_key8_ext_ops);
if (status < 0)
return status;