[dpdk-dev] [PATCH V2 0/5] table: add key mask for hash tables
Cristian Dumitrescu
cristian.dumitrescu at intel.com
Tue Oct 10 13:18:56 CEST 2017
Main changes:
1. The key_mask parameter is added to all the hash tables that were
previously missing it, as well to the hash compute function. This was
first started in DPDK 2.0, but was only implemented for a couple of
hash tables. The benefit of this approach is that it allows for better
performance for large keys (bigger than 16 bytes), while it preserves
the same performance for small keys [Q&A1].
2. The precomputed key signature (i.e. non-"do-sig") versions have been
removed for all the hash tables, so now the key signature is always
computed on every lookup. Note that this approach also allows for the
precomputed key signature scheme [Q&A2].
3. API cleanup: single parameter structure common for all hash tables.
Q&A:
Q1: How is better lookup performance achieved by using key mask approach
for hash tables?
A1: This approach eliminates the need to consolidate the lookup key in a
single contiguous buffer where the relevant packet fields are written
one by one, which is a very costly operation that also hash strong data
dependencies.
Q2: How can the pre-computed key signature scheme be implemented with
current approach?
A2: The application can implement a straightforward custom hash function
that simply reads the pre-computed key signature from a given offset
in the input key buffer where it has been stored prior to the lookup
operation.
Cristian Dumitrescu (5):
table: add key mask for hash tables
test: update due to api changes in librte_table
test-pipeline: update due to api changes in librte_table
ip_pipeline: update due to api changes in librte_table
deprecation: removed the librte_table notice
doc/guides/rel_notes/deprecation.rst | 6 -
examples/ip_pipeline/pipeline/hash_func.h | 178 +++--
.../pipeline/pipeline_flow_classification.c | 12 +-
.../pipeline/pipeline_flow_classification_be.c | 51 +-
.../ip_pipeline/pipeline/pipeline_passthrough_be.c | 18 +-
.../ip_pipeline/pipeline/pipeline_routing_be.c | 18 +-
lib/librte_table/rte_table_hash.h | 306 +--------
lib/librte_table/rte_table_hash_cuckoo.c | 205 +++---
lib/librte_table/rte_table_hash_ext.c | 417 ++++--------
lib/librte_table/rte_table_hash_key16.c | 749 ++++++---------------
lib/librte_table/rte_table_hash_key32.c | 435 +++++++-----
lib/librte_table/rte_table_hash_key8.c | 715 ++++++--------------
lib/librte_table/rte_table_hash_lru.c | 513 ++++++--------
lib/librte_table/rte_table_version.map | 23 +-
test/test-pipeline/main.h | 5 +-
test/test-pipeline/pipeline_hash.c | 107 +--
test/test/test_table.c | 1 +
test/test/test_table.h | 3 +-
test/test/test_table_combined.c | 140 ++--
test/test/test_table_tables.c | 148 ++--
20 files changed, 1444 insertions(+), 2606 deletions(-)
--
2.7.4
More information about the dev
mailing list