Wei Shen be856325cb hash: add scalable multi-writer insertion with Intel TSX
This patch introduced scalable multi-writer Cuckoo Hash insertion
based on a split Cuckoo Search and Move operation using Intel
TSX. It can do scalable hash insertion with 22 cores with little
performance loss and negligible TSX abortion rate.

* Added an extra rte_hash flag definition to switch default single writer
  Cuckoo Hash behavior to multiwriter.
    - If HTM is available, it would use hardware feature for concurrency.
    - If HTM is not available, it would fall back to spinlock.

* Created a rte_cuckoo_hash_x86.h file to hold all x86-arch related
  cuckoo_hash functions. And rte_cuckoo_hash.c uses compile time flag to
  select x86 file or other platform-specific implementations. While HTM check
  is still done at runtime (same idea with
  RTE_HASH_EXTRA_FLAGS_TRANS_MEM_SUPPORT)

* Moved rte_hash private struct definitions to rte_cuckoo_hash.h, to allow
  rte_cuckoo_hash_x86.h or future platform dependent functions to include.

* Following new functions are created for consistent names when new platform
  TM support are added.
    - rte_hash_cuckoo_move_insert_mw_tm: do insertion with bucket movement.
    - rte_hash_cuckoo_insert_mw_tm: do insertion without bucket movement.

* One extra multi-writer test case is added.

Signed-off-by: Wei Shen <wei1.shen@intel.com>
Signed-off-by: Sameh Gobriel <sameh.gobriel@intel.com>
Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
2016-06-24 16:25:07 +02:00
..
2016-06-10 15:08:57 +02:00
2015-06-12 11:10:10 +02:00
2016-06-14 15:31:26 +02:00
2015-09-03 19:22:48 +02:00
2015-09-03 19:22:48 +02:00
2016-05-24 17:00:55 +02:00
2014-06-11 00:29:34 +02:00
2014-06-11 00:29:34 +02:00
2016-06-20 22:25:43 +02:00
2015-05-11 15:51:14 +02:00
2016-04-06 12:02:09 +02:00
2014-11-25 13:16:24 +01:00
2015-03-10 12:17:31 +01:00
2016-05-24 17:00:55 +02:00
2014-11-27 16:21:11 +01:00
2016-06-10 15:08:57 +02:00
2014-06-11 00:29:34 +02:00
2016-05-24 17:00:56 +02:00
2014-06-11 00:29:34 +02:00
2016-05-24 17:00:55 +02:00
2016-06-24 11:01:05 +02:00
2016-06-15 15:54:44 +02:00
2014-11-26 17:27:04 +01:00
2015-04-20 14:37:36 +02:00
2016-05-24 17:00:56 +02:00
2014-09-29 15:04:55 +02:00
2015-07-01 23:26:10 +02:00
2016-05-24 17:00:55 +02:00
2016-03-11 15:56:07 +01:00
2016-03-31 17:09:23 +02:00