[v1,0/5] hash: add extendable bucket and partial-key hashing
Message ID | 1536253745-133104-1-git-send-email-yipeng1.wang@intel.com (mailing list archive) |
---|---|
Headers |
Return-Path: <dev-bounces@dpdk.org> X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id BBB0A4C80; Fri, 7 Sep 2018 02:13:50 +0200 (CEST) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by dpdk.org (Postfix) with ESMTP id 531EC37B0 for <dev@dpdk.org>; Fri, 7 Sep 2018 02:13:48 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 06 Sep 2018 17:13:47 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.53,340,1531810800"; d="scan'208";a="255176881" Received: from skx-yipeng.jf.intel.com ([10.54.81.175]) by orsmga005.jf.intel.com with ESMTP; 06 Sep 2018 17:13:46 -0700 From: Yipeng Wang <yipeng1.wang@intel.com> To: pablo.de.lara.guarch@intel.com, bruce.richardson@intel.com Cc: dev@dpdk.org, yipeng1.wang@intel.com, michel@digirati.com.br, honnappa.nagarahalli@arm.com Date: Thu, 6 Sep 2018 10:09:00 -0700 Message-Id: <1536253745-133104-1-git-send-email-yipeng1.wang@intel.com> X-Mailer: git-send-email 2.7.4 Subject: [dpdk-dev] [PATCH v1 0/5] hash: add extendable bucket and partial-key hashing X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions <dev.dpdk.org> List-Unsubscribe: <https://mails.dpdk.org/options/dev>, <mailto:dev-request@dpdk.org?subject=unsubscribe> List-Archive: <http://mails.dpdk.org/archives/dev/> List-Post: <mailto:dev@dpdk.org> List-Help: <mailto:dev-request@dpdk.org?subject=help> List-Subscribe: <https://mails.dpdk.org/listinfo/dev>, <mailto:dev-request@dpdk.org?subject=subscribe> Errors-To: dev-bounces@dpdk.org Sender: "dev" <dev-bounces@dpdk.org> |
Message
Wang, Yipeng1
Sept. 6, 2018, 5:09 p.m. UTC
This patch set made two major improvements over the current rte_hash library.
First, it adds Extendable Bucket Table feature: a new structure that can
accommodate keys that failed to get inserted into the main hash table due to
the unlikely event of excessive hash collisions. The hash table buckets will
get extended using a linked list to host these keys. This new design will
guarantee insertion of 100% of the keys for a given hash table size with
minimal overhead. A new flag value is added for user to indicate if the
extendable bucket feature should be enabled or not. The linked list buckets is
similar concept to the extendable bucket hash table in packet framework.
In details, for insertion, the linked buckets will be used to store the keys
that fail to get in the primary and the secondary bucket and the cuckoo path
could not find an empty location for the maximum path length (small
probability). For lookup, the key is checked first in the primary, then the
secondary, then if the secondary is extended the linked list is traversed
for a possible match.
Second, the patch set changes the current hashing algorithm to be "partial-key
hashing". Partial-key hashing is the concept from Bin Fan, et al.'s paper
"MemC3: Compact and Concurrent MemCache with Dumber Caching and Smarter
Hashing". Instead of storing both 32-bit signature and alternative signature
in the bucket, we only store a small 16-bit signature and calculate the
alternative bucket index by XORing the signature with the current bucket index.
This doubles the hash table memory efficiency since now one bucket
only occupies one cache line instead of two in the original design.
Signed-off-by: Yipeng Wang <yipeng1.wang@intel.com>
Yipeng Wang (5):
test: fix bucket size in hash table perf test
test: more accurate hash table perf test output
hash: add extendable bucket feature
test: implement extendable bucket hash test
hash: use partial-key hashing
lib/librte_hash/rte_cuckoo_hash.c | 518 +++++++++++++++++++++++++++-----------
lib/librte_hash/rte_cuckoo_hash.h | 11 +-
lib/librte_hash/rte_hash.h | 3 +
test/test/test_hash.c | 145 ++++++++++-
test/test/test_hash_perf.c | 126 +++++++---
5 files changed, 618 insertions(+), 185 deletions(-)