WARNING: multiple messages refer to this Message-ID
From: Gavin Hu <gavin.hu@arm.com> To: dev@dpdk.org Cc: nd@arm.com, thomas@monjalon.net, jerinj@marvell.com, hemant.agrawal@nxp.com, nipun.gupta@nxp.com, Honnappa.Nagarahalli@arm.com, gavin.hu@arm.com, i.maximets@samsung.com, olivier.matz@6wind.com, stable@dpdk.org Subject: [dpdk-dev] [PATCH v7 2/2] hash: flush the rings instead of dequeuing one by one Date: Fri, 15 Mar 2019 11:31:26 +0800 Message-ID: <1552620686-10347-3-git-send-email-gavin.hu@arm.com> (raw) In-Reply-To: <20181212062404.30243-1-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> Acked-by: Yipeng Wang <yipeng1.wang@intel.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
From: Gavin Hu <gavin.hu@arm.com> To: dev@dpdk.org Cc: nd@arm.com, thomas@monjalon.net, jerinj@marvell.com, hemant.agrawal@nxp.com, nipun.gupta@nxp.com, Honnappa.Nagarahalli@arm.com, gavin.hu@arm.com, i.maximets@samsung.com, olivier.matz@6wind.com, stable@dpdk.org Subject: [dpdk-dev] [PATCH v7 2/2] hash: flush the rings instead of dequeuing one by one Date: Fri, 15 Mar 2019 11:31:26 +0800 Message-ID: <1552620686-10347-3-git-send-email-gavin.hu@arm.com> (raw) Message-ID: <20190315033126.MHQhl3oGEN0aYEFyhzq4KwHzWLqUQEmEvAeTyUuwajI@z> (raw) In-Reply-To: <20181212062404.30243-1-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> Acked-by: Yipeng Wang <yipeng1.wang@intel.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
next prev parent reply index Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-12-12 6:24 [dpdk-dev] [PATCH v1 0/2] add rte_ring_reset and use it to flush a ring Gavin Hu 2018-12-12 6:24 ` [dpdk-dev] [PATCH v1 1/2] ring: add rte_ring_reset api to flush the ring Gavin Hu 2018-12-12 6:24 ` [dpdk-dev] [PATCH v1 2/2] hash: flush the rings instead of dequeuing one by one Gavin Hu 2018-12-12 6:47 ` [dpdk-dev] [PATCH v2 0/2] add rte ring reset api and use it to flush a ring by hash Gavin Hu 2018-12-12 6:47 ` [dpdk-dev] [PATCH v2 1/2] ring: add reset api to flush the ring when not in use Gavin Hu 2018-12-12 6:47 ` [dpdk-dev] [PATCH v2 2/2] hash: flush the rings instead of dequeuing one by one Gavin Hu 2018-12-12 10:15 ` Bruce Richardson 2018-12-12 19:28 ` Mattias Rönnblom 2019-03-15 3:31 ` [dpdk-dev] [PATCH v7 0/2] new ring reset api and use it by hash Gavin Hu 2019-03-15 3:31 ` Gavin Hu 2019-03-15 3:31 ` [dpdk-dev] [PATCH v7 1/2] ring: add reset API to flush the ring when not in use Gavin Hu 2019-03-15 3:31 ` Gavin Hu 2019-03-29 14:17 ` Olivier Matz 2019-03-29 14:17 ` Olivier Matz 2019-07-04 14:42 ` Thomas Monjalon 2019-07-12 9:32 ` Gavin Hu (Arm Technology China) 2019-07-12 9:53 ` Olivier Matz 2019-07-12 11:06 ` Gavin Hu (Arm Technology China) 2019-07-12 11:48 ` Olivier Matz 2019-07-12 15:07 ` Gavin Hu (Arm Technology China) 2019-07-12 15:40 ` Honnappa Nagarahalli 2019-07-12 16:01 ` Gavin Hu (Arm Technology China) 2019-07-16 8:47 ` Olivier Matz 2019-07-16 9:00 ` Olivier Matz 2019-03-15 3:31 ` Gavin Hu [this message] 2019-03-15 3:31 ` [dpdk-dev] [PATCH v7 2/2] hash: flush the rings instead of dequeuing one by one Gavin Hu 2019-07-12 9:26 ` [dpdk-dev] [PATCH v8 0/2] new ring reset api and use it by hash Gavin Hu 2019-07-12 9:26 ` [dpdk-dev] [PATCH v8 1/2] ring: add reset API to flush the ring when not in use Gavin Hu 2019-07-12 9:26 ` [dpdk-dev] [PATCH v8 2/2] hash: flush the rings instead of dequeuing one by one Gavin Hu 2019-07-12 15:54 ` [dpdk-dev] [PATCH v9 0/2] new ring reset api and use it by hash Gavin Hu 2019-07-12 15:54 ` [dpdk-dev] [PATCH v9 1/2] ring: add reset API to flush the ring when not in use Gavin Hu 2019-07-16 9:01 ` Olivier Matz 2019-07-16 11:31 ` Olivier Matz 2019-07-16 14:03 ` Gavin Hu (Arm Technology China) 2019-07-16 15:06 ` Thomas Monjalon 2019-07-16 19:25 ` Gavin Hu (Arm Technology China) 2019-07-12 15:54 ` [dpdk-dev] [PATCH v9 2/2] hash: flush the rings instead of dequeuing one by one Gavin Hu 2019-07-16 19:23 ` [dpdk-dev] [PATCH v10 0/2] new ring reset api and use it by hash Gavin Hu 2019-07-17 17:53 ` Thomas Monjalon 2019-07-16 19:23 ` [dpdk-dev] [PATCH v10 1/2] ring: add reset API to flush the ring when not in use Gavin Hu 2019-07-16 19:23 ` [dpdk-dev] [PATCH v10 2/2] hash: flush the rings instead of dequeuing one by one Gavin Hu
Reply instructions: You may reply publically 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=1552620686-10347-3-git-send-email-gavin.hu@arm.com \ --to=gavin.hu@arm.com \ --cc=Honnappa.Nagarahalli@arm.com \ --cc=dev@dpdk.org \ --cc=hemant.agrawal@nxp.com \ --cc=i.maximets@samsung.com \ --cc=jerinj@marvell.com \ --cc=nd@arm.com \ --cc=nipun.gupta@nxp.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
DPDK patches and discussions Archives are clonable: git clone --mirror http://inbox.dpdk.org/dev/0 dev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 dev dev/ http://inbox.dpdk.org/dev \ dev@dpdk.org public-inbox-index dev Newsgroup available over NNTP: nntp://inbox.dpdk.org/inbox.dpdk.dev AGPL code for this site: git clone https://public-inbox.org/ public-inbox