All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dharmik Thakkar <Dharmik.Thakkar@arm.com>
To: David Marchand <david.marchand@redhat.com>
Cc: "dev@dpdk.org" <dev@dpdk.org>,
	"thomas@monjalon.net" <thomas@monjalon.net>,
	Stephen Hemminger <stephen@networkplumber.org>,
	"maxime.coquelin@redhat.com" <maxime.coquelin@redhat.com>,
	"stable@dpdk.org" <stable@dpdk.org>,
	Yipeng Wang <yipeng1.wang@intel.com>,
	Sameh Gobriel <sameh.gobriel@intel.com>,
	Bruce Richardson <bruce.richardson@intel.com>,
	Pablo de Lara <pablo.de.lara.guarch@intel.com>, nd <nd@arm.com>
Subject: Re: [dpdk-dev] [PATCH v2 1/2] test/hash: use existing lcore API
Date: Wed, 22 May 2019 16:26:01 +0000	[thread overview]
Message-ID: <9B028D36-C801-49AC-B529-C8721F0B7D8C@arm.com> (raw)
In-Reply-To: <1558537617-27813-1-git-send-email-david.marchand@redhat.com>

Hi David,

Thank you for the patch!

Some comments inlined.

> On May 22, 2019, at 10:06 AM, David Marchand <david.marchand@redhat.com> wrote:
> 
> Prefer the existing apis rather than direct access the configuration
> structure.
> 
> test_hash_multi_add_lookup() currently starts n readers and N writers
> using rte_eal_remote_launch().
> It then waits for the N writers to complete with a custom
> multi_writer_done[] array to synchronise over.
> Jump on the occasion to use rte_eal_wait_lcore() so that the code is
> more straightforward:
> - we start n readers with rte_eal_remote_launch(),
> - we start N writers with rte_eal_remote_launch(),
> - we wait for N writers to join with rte_eal_wait_lcore(),
> - we wait for n readers to join with rte_eal_wait_lcore(),
> 
> Fixes: c7eb0972e74b ("test/hash: add lock-free r/w concurrency")
> Fixes: 3f9aab961ed3 ("test/hash: check lock-free extendable bucket")
> Cc: stable@dpdk.org
> 
> Signed-off-by: David Marchand <david.marchand@redhat.com>
> ---
> app/test/test_hash_readwrite_lf.c | 41 ++++++++++++++++++---------------------
> 1 file changed, 19 insertions(+), 22 deletions(-)
> 
> ---
> Changelog since v1:
> - fixed test hang in test_hash_multi_add_lookup() reported by Wang, Yipeng
> 
> diff --git a/app/test/test_hash_readwrite_lf.c b/app/test/test_hash_readwrite_lf.c
> index 4ab4c8e..343a338 100644
> --- a/app/test/test_hash_readwrite_lf.c
> +++ b/app/test/test_hash_readwrite_lf.c
> @@ -86,7 +86,6 @@ struct {
> static rte_atomic64_t greads;
> 
> static volatile uint8_t writer_done;
> -static volatile uint8_t multi_writer_done[4];
> 
> uint16_t enabled_core_ids[RTE_MAX_LCORE];
> 
> @@ -690,7 +689,6 @@ struct {
> 	for (i = offset; i < offset + tbl_rwc_test_param.single_insert; i++)
> 		rte_hash_add_key(tbl_rwc_test_param.h,
> 				 tbl_rwc_test_param.keys_ks + i);
> -	multi_writer_done[pos_core] = 1;
> 	return 0;
> }
> 
> @@ -738,10 +736,9 @@ struct {
> 				rte_eal_remote_launch(test_rwc_reader,
> 						(void *)(uintptr_t)read_type,
> 							enabled_core_ids[i]);
> -			rte_eal_mp_wait_lcore();
> 
> 			for (i = 1; i <= rwc_core_cnt[n]; i++)
> -				if (lcore_config[i].ret < 0)
> +				if (rte_eal_wait_lcore(i) < 0)
if (rte_eal_wait_lcore(enabled_core_ids[i]) < 0)

(There are similar changes in other functions too.
I realize that this is a separate issue than what the patch is aimed for.
If you see fit, please integrate it, else I will put out a patch once your patch has been merged.)
> 					goto err;
> 
> 			unsigned long long cycles_per_lookup =
> @@ -758,6 +755,7 @@ struct {
> 	return 0;
> 
> err:
> +	rte_eal_mp_wait_lcore();
> 	rte_hash_free(tbl_rwc_test_param.h);
> 	return -1;
> }
> @@ -808,12 +806,11 @@ struct {
> 							enabled_core_ids[i]);
> 			ret = write_keys(write_type);
> 			writer_done = 1;
> -			rte_eal_mp_wait_lcore();
> 
> 			if (ret < 0)
> 				goto err;
> 			for (i = 1; i <= rwc_core_cnt[n]; i++)
> -				if (lcore_config[i].ret < 0)
> +				if (rte_eal_wait_lcore(i) < 0)
if (rte_eal_wait_lcore(enabled_core_ids[i]) < 0)
> 					goto err;
> 
> 			unsigned long long cycles_per_lookup =
> @@ -830,6 +827,7 @@ struct {
> 	return 0;
> 
> err:
> +	rte_eal_mp_wait_lcore();
> 	rte_hash_free(tbl_rwc_test_param.h);
> 	return -1;
> }
> @@ -884,12 +882,11 @@ struct {
> 			write_type = WRITE_KEY_SHIFT;
> 			ret = write_keys(write_type);
> 			writer_done = 1;
> -			rte_eal_mp_wait_lcore();
> 
> 			if (ret < 0)
> 				goto err;
> 			for (i = 1; i <= rwc_core_cnt[n]; i++)
> -				if (lcore_config[i].ret < 0)
> +				if (rte_eal_wait_lcore(i) < 0)
if (rte_eal_wait_lcore(enabled_core_ids[i]) < 0)
> 					goto err;
> 
> 			unsigned long long cycles_per_lookup =
> @@ -906,6 +903,7 @@ struct {
> 	return 0;
> 
> err:
> +	rte_eal_mp_wait_lcore();
> 	rte_hash_free(tbl_rwc_test_param.h);
> 	return -1;
> }
> @@ -960,12 +958,11 @@ struct {
> 			write_type = WRITE_KEY_SHIFT;
> 			ret = write_keys(write_type);
> 			writer_done = 1;
> -			rte_eal_mp_wait_lcore();
> 
> 			if (ret < 0)
> 				goto err;
> 			for (i = 1; i <= rwc_core_cnt[n]; i++)
> -				if (lcore_config[i].ret < 0)
> +				if (rte_eal_wait_lcore(i) < 0)
if (rte_eal_wait_lcore(enabled_core_ids[i]) < 0)
> 					goto err;
> 
> 			unsigned long long cycles_per_lookup =
> @@ -982,6 +979,7 @@ struct {
> 	return 0;
> 
> err:
> +	rte_eal_mp_wait_lcore();
> 	rte_hash_free(tbl_rwc_test_param.h);
> 	return -1;
> }
> @@ -1035,12 +1033,11 @@ struct {
> 			write_type = WRITE_KEY_SHIFT;
> 			ret = write_keys(write_type);
> 			writer_done = 1;
> -			rte_eal_mp_wait_lcore();
> 
> 			if (ret < 0)
> 				goto err;
> 			for (i = 1; i <= rwc_core_cnt[n]; i++)
> -				if (lcore_config[i].ret < 0)
> +				if (rte_eal_wait_lcore(i) < 0)
if (rte_eal_wait_lcore(enabled_core_ids[i]) < 0)
> 					goto err;
> 
> 			unsigned long long cycles_per_lookup =
> @@ -1056,6 +1053,7 @@ struct {
> 	return 0;
> 
> err:
> +	rte_eal_mp_wait_lcore();
> 	rte_hash_free(tbl_rwc_test_param.h);
> 	return -1;
> }
> @@ -1108,8 +1106,6 @@ struct {
> 
> 				rte_hash_reset(tbl_rwc_test_param.h);
> 				writer_done = 0;
> -				for (i = 0; i < 4; i++)
> -					multi_writer_done[i] = 0;
> 				write_type = WRITE_NO_KEY_SHIFT;
> 				if (write_keys(write_type) < 0)
> 					goto err;
> @@ -1133,15 +1129,15 @@ struct {
> 				}
> 
> 				/* Wait for writers to complete */
> -				for (i = 0; i < rwc_core_cnt[m]; i++)
> -					while
> -						(multi_writer_done[i] == 0);
> -				writer_done = 1;
> +				for (i = rwc_core_cnt[n] + 1;
> +				     i <= rwc_core_cnt[m] + rwc_core_cnt[n];
> +				     i++)
> +					rte_eal_wait_lcore(i);
rte_eal_wait_lcore(enabled_core_ids[i]);
> 
> -				rte_eal_mp_wait_lcore();
> +				writer_done = 1;
> 
> 				for (i = 1; i <= rwc_core_cnt[n]; i++)
> -					if (lcore_config[i].ret < 0)
> +					if (rte_eal_wait_lcore(i) < 0)
if (rte_eal_wait_lcore(enabled_core_ids[i]) < 0)
> 						goto err;
> 
> 				unsigned long long cycles_per_lookup =
> @@ -1160,6 +1156,7 @@ struct {
> 	return 0;
> 
> err:
> +	rte_eal_mp_wait_lcore();
> 	rte_hash_free(tbl_rwc_test_param.h);
> 	return -1;
> }
> @@ -1222,10 +1219,9 @@ struct {
> 				}
> 			}
> 			writer_done = 1;
> -			rte_eal_mp_wait_lcore();
> 
> 			for (i = 1; i <= rwc_core_cnt[n]; i++)
> -				if (lcore_config[i].ret < 0)
> +				if (rte_eal_wait_lcore(i) < 0)
if (rte_eal_wait_lcore(enabled_core_ids[i]) < 0)
> 					goto err;
> 
> 			unsigned long long cycles_per_lookup =
> @@ -1242,6 +1238,7 @@ struct {
> 	return 0;
> 
> err:
> +	rte_eal_mp_wait_lcore();
> 	rte_hash_free(tbl_rwc_test_param.h);
> 	return -1;
> }
> -- 
> 1.8.3.1
> 
Thank you,
Dharmik Thakkar


  parent reply	other threads:[~2019-05-22 16:26 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-05-15  7:56 [dpdk-dev] [PATCH 1/2] test/hash: use existing lcore API David Marchand
2019-05-15  7:57 ` [dpdk-dev] [PATCH 2/2] test/rcu: " David Marchand
2019-05-15 12:19   ` Maxime Coquelin
2019-05-15 20:04   ` Honnappa Nagarahalli
2019-05-15 12:14 ` [dpdk-dev] [PATCH 1/2] test/hash: " Maxime Coquelin
2019-05-22  0:16 ` Wang, Yipeng1
2019-05-22 12:40   ` David Marchand
2019-05-22 15:06 ` [dpdk-dev] [PATCH v2 " David Marchand
2019-05-22 15:06   ` [dpdk-dev] [PATCH v2 2/2] test/rcu: " David Marchand
2019-05-23 14:20     ` Maxime Coquelin
2019-05-29 22:41       ` [dpdk-dev] [dpdk-stable] " Thomas Monjalon
2019-05-22 16:26   ` Dharmik Thakkar [this message]
2019-05-22 17:17     ` [dpdk-dev] [PATCH v2 1/2] test/hash: " David Marchand
2019-05-22 19:37       ` Dharmik Thakkar
2019-05-27 10:15         ` David Marchand
2019-05-28 14:15           ` Dharmik Thakkar
2019-05-23 12:48   ` Maxime Coquelin

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=9B028D36-C801-49AC-B529-C8721F0B7D8C@arm.com \
    --to=dharmik.thakkar@arm.com \
    --cc=bruce.richardson@intel.com \
    --cc=david.marchand@redhat.com \
    --cc=dev@dpdk.org \
    --cc=maxime.coquelin@redhat.com \
    --cc=nd@arm.com \
    --cc=pablo.de.lara.guarch@intel.com \
    --cc=sameh.gobriel@intel.com \
    --cc=stable@dpdk.org \
    --cc=stephen@networkplumber.org \
    --cc=thomas@monjalon.net \
    --cc=yipeng1.wang@intel.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.