DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH v3 0/2] add rte ring reset api and use it to flush a ring by hash
@ 2018-12-12 11:15 Gavin Hu
  2018-12-12 11:15 ` [dpdk-dev] [PATCH v3 1/2] ring: add reset api to flush the ring when not in use Gavin Hu
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Gavin Hu @ 2018-12-12 11:15 UTC (permalink / raw)
  To: dev
  Cc: nd, Gavin Hu, thomas, jerin.jacob, hemant.agrawal,
	Honnappa.Nagarahalli, bruce.richardson

V3: Allow experimental API for meson build

V2: Fix the coding style issue(commit message line too long)

V1: To flush a ring not in use, dequeue one by one is wasting cpu cycles.
The patch is to just resetting the head and tail indices to save cpu
cycle.

Gavin Hu (2):
  ring: add reset api to flush the ring when not in use
  hash: flush the rings instead of dequeuing one by one

 lib/librte_hash/Makefile             |  2 +-
 lib/librte_hash/meson.build          |  3 +++
 lib/librte_hash/rte_cuckoo_hash.c    | 11 ++++-------
 lib/librte_ring/rte_ring.h           | 20 ++++++++++++++++++++
 lib/librte_ring/rte_ring_version.map |  7 +++++++
 5 files changed, 35 insertions(+), 8 deletions(-)

-- 
2.11.0

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [dpdk-dev] [PATCH v3 1/2] ring: add reset api to flush the ring when not in use
  2018-12-12 11:15 [dpdk-dev] [PATCH v3 0/2] add rte ring reset api and use it to flush a ring by hash Gavin Hu
@ 2018-12-12 11:15 ` Gavin Hu
  2018-12-12 11:15 ` [dpdk-dev] [PATCH v3 2/2] hash: flush the rings instead of dequeuing one by one Gavin Hu
  2018-12-19 21:59 ` [dpdk-dev] [PATCH v3 0/2] add rte ring reset api and use it to flush a ring by hash Thomas Monjalon
  2 siblings, 0 replies; 4+ messages in thread
From: Gavin Hu @ 2018-12-12 11:15 UTC (permalink / raw)
  To: dev
  Cc: nd, Gavin Hu, thomas, jerin.jacob, hemant.agrawal,
	Honnappa.Nagarahalli, bruce.richardson

Currently, the flush is done by dequeuing the ring in a while loop. It is
much simpler to flush the queue by resetting the head and tail indices.

Signed-off-by: Gavin Hu <gavin.hu@arm.com>
Reviewed-by: Ruifeng Wang <Ruifeng.Wang@arm.com>
Reviewed-by: Honnappa Nagarahalli <Honnappa.Nagarahalli@arm.com>
---
 lib/librte_ring/rte_ring.h           | 20 ++++++++++++++++++++
 lib/librte_ring/rte_ring_version.map |  7 +++++++
 2 files changed, 27 insertions(+)

diff --git a/lib/librte_ring/rte_ring.h b/lib/librte_ring/rte_ring.h
index af5444a9f..283030011 100644
--- a/lib/librte_ring/rte_ring.h
+++ b/lib/librte_ring/rte_ring.h
@@ -671,6 +671,26 @@ rte_ring_dequeue(struct rte_ring *r, void **obj_p)
 }
 
 /**
+ * Flush a ring.
+ *
+ * This function flush all the elements in a ring
+ *
+ * @b EXPERIMENTAL: this API may change without prior notice
+ *
+ * @warning
+ * Make sure the ring is not in use while calling this function.
+ *
+ * @param r
+ *   A pointer to the ring structure.
+ */
+static inline void __rte_experimental
+rte_ring_reset(struct rte_ring *r)
+{
+	r->prod.head = r->cons.head = 0;
+	r->prod.tail = r->cons.tail = 0;
+}
+
+/**
  * Return the number of entries in a ring.
  *
  * @param r
diff --git a/lib/librte_ring/rte_ring_version.map b/lib/librte_ring/rte_ring_version.map
index d935efd0d..581d9cabe 100644
--- a/lib/librte_ring/rte_ring_version.map
+++ b/lib/librte_ring/rte_ring_version.map
@@ -17,3 +17,10 @@ DPDK_2.2 {
 	rte_ring_free;
 
 } DPDK_2.0;
+
+EXPERIMENTAL {
+    global:
+
+	rte_ring_reset;
+
+};
-- 
2.11.0

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [dpdk-dev] [PATCH v3 2/2] hash: flush the rings instead of dequeuing one by one
  2018-12-12 11:15 [dpdk-dev] [PATCH v3 0/2] add rte ring reset api and use it to flush a ring by hash Gavin Hu
  2018-12-12 11:15 ` [dpdk-dev] [PATCH v3 1/2] ring: add reset api to flush the ring when not in use Gavin Hu
@ 2018-12-12 11:15 ` Gavin Hu
  2018-12-19 21:59 ` [dpdk-dev] [PATCH v3 0/2] add rte ring reset api and use it to flush a ring by hash Thomas Monjalon
  2 siblings, 0 replies; 4+ messages in thread
From: Gavin Hu @ 2018-12-12 11:15 UTC (permalink / raw)
  To: dev
  Cc: nd, Gavin Hu, thomas, jerin.jacob, hemant.agrawal,
	Honnappa.Nagarahalli, bruce.richardson, stable

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 c8c435dfd..5669d83f4 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 efc06ede5..ebf70de89 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 c55a4f263..2719af3ce 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.11.0

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [dpdk-dev] [PATCH v3 0/2] add rte ring reset api and use it to flush a ring by hash
  2018-12-12 11:15 [dpdk-dev] [PATCH v3 0/2] add rte ring reset api and use it to flush a ring by hash Gavin Hu
  2018-12-12 11:15 ` [dpdk-dev] [PATCH v3 1/2] ring: add reset api to flush the ring when not in use Gavin Hu
  2018-12-12 11:15 ` [dpdk-dev] [PATCH v3 2/2] hash: flush the rings instead of dequeuing one by one Gavin Hu
@ 2018-12-19 21:59 ` Thomas Monjalon
  2 siblings, 0 replies; 4+ messages in thread
From: Thomas Monjalon @ 2018-12-19 21:59 UTC (permalink / raw)
  To: Gavin Hu
  Cc: dev, nd, jerin.jacob, hemant.agrawal, Honnappa.Nagarahalli,
	bruce.richardson, Olivier Matz

+Cc Olivier, maintainer of the ring library.

12/12/2018 12:15, Gavin Hu:
> V3: Allow experimental API for meson build
> 
> V2: Fix the coding style issue(commit message line too long)
> 
> V1: To flush a ring not in use, dequeue one by one is wasting cpu cycles.
> The patch is to just resetting the head and tail indices to save cpu
> cycle.
> 
> Gavin Hu (2):
>   ring: add reset api to flush the ring when not in use
>   hash: flush the rings instead of dequeuing one by one
> 
>  lib/librte_hash/Makefile             |  2 +-
>  lib/librte_hash/meson.build          |  3 +++
>  lib/librte_hash/rte_cuckoo_hash.c    | 11 ++++-------
>  lib/librte_ring/rte_ring.h           | 20 ++++++++++++++++++++
>  lib/librte_ring/rte_ring_version.map |  7 +++++++
>  5 files changed, 35 insertions(+), 8 deletions(-)

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2018-12-19 21:59 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-12-12 11:15 [dpdk-dev] [PATCH v3 0/2] add rte ring reset api and use it to flush a ring by hash Gavin Hu
2018-12-12 11:15 ` [dpdk-dev] [PATCH v3 1/2] ring: add reset api to flush the ring when not in use Gavin Hu
2018-12-12 11:15 ` [dpdk-dev] [PATCH v3 2/2] hash: flush the rings instead of dequeuing one by one Gavin Hu
2018-12-19 21:59 ` [dpdk-dev] [PATCH v3 0/2] add rte ring reset api and use it to flush a ring by hash Thomas Monjalon

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).