DPDK patches and discussions
 help / color / mirror / Atom feed
From: Gavin Hu <gavin.hu@arm.com>
To: dev@dpdk.org
Cc: thomas@monjalon.net, jerinj@marvell.com, hemant.agrawal@nxp.com,
	bruce.richardson@intel.com, chaozhu@linux.vnet.ibm.com,
	Honnappa.Nagarahalli@arm.com, nd@arm.com, olivier.matz@6wind.com,
	stable@dpdk.org
Subject: [dpdk-dev] [PATCH v4 3/3] hash: flush the rings instead of dequeuing one by one
Date: Wed,  2 Jan 2019 08:55:33 +0800	[thread overview]
Message-ID: <1546390533-53868-4-git-send-email-gavin.hu@arm.com> (raw)
In-Reply-To: <1546390533-53868-1-git-send-email-gavin.hu@arm.com>

Within rte_hash_reset, calling a while loop to dequeue one by
one from the ring, while not using them at all, is wasting cycles,
The patch just flush the ring by resetting the indices can save cpu
cycles.

Fixes: b26473ff8f4a ("hash: add reset function")
Fixes: 75706568a7eb ("hash: add extendable bucket feature")
Cc: stable@dpdk.org

Signed-off-by: Gavin Hu <gavin.hu@arm.com>
Reviewed-by: Honnappa Nagarahalli <Honnappa.Nagarahalli@arm.com>
---
 lib/librte_hash/Makefile          |  2 +-
 lib/librte_hash/meson.build       |  3 +++
 lib/librte_hash/rte_cuckoo_hash.c | 11 ++++-------
 3 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/lib/librte_hash/Makefile b/lib/librte_hash/Makefile
index c8c435d..5669d83 100644
--- a/lib/librte_hash/Makefile
+++ b/lib/librte_hash/Makefile
@@ -6,7 +6,7 @@ include $(RTE_SDK)/mk/rte.vars.mk
 # library name
 LIB = librte_hash.a
 
-CFLAGS += -O3
+CFLAGS += -O3 -DALLOW_EXPERIMENTAL_API
 CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR)
 LDLIBS += -lrte_eal -lrte_ring
 
diff --git a/lib/librte_hash/meson.build b/lib/librte_hash/meson.build
index efc06ed..ebf70de 100644
--- a/lib/librte_hash/meson.build
+++ b/lib/librte_hash/meson.build
@@ -14,3 +14,6 @@ headers = files('rte_cmp_arm64.h',
 
 sources = files('rte_cuckoo_hash.c', 'rte_fbk_hash.c')
 deps += ['ring']
+
+# rte ring reset is not yet part of stable API
+allow_experimental_apis = true
diff --git a/lib/librte_hash/rte_cuckoo_hash.c b/lib/librte_hash/rte_cuckoo_hash.c
index c01489b..4b08049 100644
--- a/lib/librte_hash/rte_cuckoo_hash.c
+++ b/lib/librte_hash/rte_cuckoo_hash.c
@@ -559,7 +559,6 @@ __hash_rw_reader_unlock(const struct rte_hash *h)
 void
 rte_hash_reset(struct rte_hash *h)
 {
-	void *ptr;
 	uint32_t tot_ring_cnt, i;
 
 	if (h == NULL)
@@ -570,16 +569,14 @@ rte_hash_reset(struct rte_hash *h)
 	memset(h->key_store, 0, h->key_entry_size * (h->entries + 1));
 	*h->tbl_chng_cnt = 0;
 
-	/* clear the free ring */
-	while (rte_ring_dequeue(h->free_slots, &ptr) == 0)
-		continue;
+	/* reset the free ring */
+	rte_ring_reset(h->free_slots);
 
-	/* clear free extendable bucket ring and memory */
+	/* flush free extendable bucket ring and memory */
 	if (h->ext_table_support) {
 		memset(h->buckets_ext, 0, h->num_buckets *
 						sizeof(struct rte_hash_bucket));
-		while (rte_ring_dequeue(h->free_ext_bkts, &ptr) == 0)
-			continue;
+		rte_ring_reset(h->free_ext_bkts);
 	}
 
 	/* Repopulate the free slots ring. Entry zero is reserved for key misses */
-- 
2.7.4

  parent reply	other threads:[~2019-01-02  0:56 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-02  0:55 [dpdk-dev] [PATCH v4 0/3] add rte ring reset api and use it to flush a ring by hash Gavin Hu
2019-01-02  0:55 ` [dpdk-dev] [PATCH v4 1/3] test/ring: ring perf test case enhancement Gavin Hu
2019-01-02 12:49   ` Thomas Monjalon
2019-01-03  2:40     ` Gavin Hu (Arm Technology China)
2019-01-02  0:55 ` [dpdk-dev] [PATCH v4 2/3] ring: add reset api to flush the ring when not in use Gavin Hu
2019-01-02  0:55 ` Gavin Hu [this message]
2019-01-02 12:50 ` [dpdk-dev] [PATCH v4 0/3] add rte ring reset api and use it to flush a ring by hash Thomas Monjalon
2019-01-02 18:40   ` Honnappa Nagarahalli
2019-01-03  2:43     ` Gavin Hu (Arm Technology China)
2019-01-03  2:38 ` [dpdk-dev] [PATCH v5 0/3] ring test enhancement and new ring reset api and use it " gavin hu
2019-01-03  2:38   ` [dpdk-dev] [PATCH v5 1/3] test/ring: ring perf test case enhancement gavin hu
2019-01-03  7:39     ` Thomas Monjalon
2019-01-03  8:22       ` Gavin Hu (Arm Technology China)
2019-01-09 11:31     ` [dpdk-dev] [PATCH v6 0/3] ring test enhancement and new ring reset api and use it by hash gavin hu
2019-01-09 11:31     ` [dpdk-dev] [PATCH v6 1/3] test/ring: ring perf test case enhancement gavin hu
2019-09-09  5:19       ` [dpdk-dev] [PATCH v7] " Joyce Kong
2019-10-08  8:07         ` Olivier Matz
2019-10-24  7:56           ` David Marchand
2019-01-09 11:31     ` [dpdk-dev] [PATCH v6 2/3] ring: add reset API to flush the ring when not in use gavin hu
2019-01-09 11:31     ` [dpdk-dev] [PATCH v6 3/3] hash: flush the rings instead of dequeuing one by one gavin hu
2019-01-09 18:53       ` Wang, Yipeng1
2019-01-03  2:38   ` [dpdk-dev] [PATCH v5 2/3] ring: add reset API to flush the ring when not in use gavin hu
2019-01-03  2:38   ` [dpdk-dev] [PATCH v5 3/3] hash: flush the rings instead of dequeuing one by one gavin hu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1546390533-53868-4-git-send-email-gavin.hu@arm.com \
    --to=gavin.hu@arm.com \
    --cc=Honnappa.Nagarahalli@arm.com \
    --cc=bruce.richardson@intel.com \
    --cc=chaozhu@linux.vnet.ibm.com \
    --cc=dev@dpdk.org \
    --cc=hemant.agrawal@nxp.com \
    --cc=jerinj@marvell.com \
    --cc=nd@arm.com \
    --cc=olivier.matz@6wind.com \
    --cc=stable@dpdk.org \
    --cc=thomas@monjalon.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).