All of lore.kernel.org
 help / color / mirror / Atom feed
From: John Kacur <jkacur@redhat.com>
To: Daniel Wagner <dwagner@suse.de>
Cc: Clark Williams <williams@redhat.com>, linux-rt-users@vger.kernel.org
Subject: Re: [rt-tests v2 v2 01/20] cyclictest: Always use libnuma
Date: Tue, 26 Jan 2021 00:10:51 -0500 (EST)	[thread overview]
Message-ID: <cf944ef0-a7e1-c0ee-f0ad-f7b98b7a7412@redhat.com> (raw)
In-Reply-To: <20201218161843.1764-2-dwagner@suse.de>



On Fri, 18 Dec 2020, Daniel Wagner wrote:

> libnuma is hard dependency for cyclictest. Thus we can always call
> numa_initialize(). This allows us to remove the global 'numa' variable
> to track if libnuma has been initialized or not.
> 
> Signed-off-by: Daniel Wagner <dwagner@suse.de>
> ---
>  src/cyclictest/cyclictest.c | 63 +++++++++++++++++--------------------
>  src/cyclictest/rt_numa.h    |  2 --
>  2 files changed, 29 insertions(+), 36 deletions(-)
> 
> diff --git a/src/cyclictest/cyclictest.c b/src/cyclictest/cyclictest.c
> index f38c453f1975..514ed7b20fdb 100644
> --- a/src/cyclictest/cyclictest.c
> +++ b/src/cyclictest/cyclictest.c
> @@ -1018,9 +1018,6 @@ static void process_options(int argc, char *argv[], int max_cpus)
>  			/* smp sets AFFINITY_USEALL in OPT_SMP */
>  			if (smp)
>  				break;
> -			if (numa_initialize())
> -				fatal("Couldn't initialize libnuma");
> -			numa = 1;
>  			if (optarg) {
>  				parse_cpumask(optarg, max_cpus, &affinity_mask);
>  				setaffinity = AFFINITY_SPECIFIED;
> @@ -1126,8 +1123,6 @@ static void process_options(int argc, char *argv[], int max_cpus)
>  			use_system = MODE_SYS_OFFSET; break;
>  		case 'S':
>  		case OPT_SMP: /* SMP testing */
> -			if (numa)
> -				fatal("numa and smp options are mutually exclusive\n");
>  			smp = 1;
>  			num_threads = -1; /* update after parsing */
>  			setaffinity = AFFINITY_USEALL;
> @@ -1201,16 +1196,17 @@ static void process_options(int argc, char *argv[], int max_cpus)
>  
>  	/* if smp wasn't requested, test for numa automatically */
>  	if (!smp) {
> -		if (numa_initialize())
> -			fatal("Couldn't initialize libnuma");
> -		numa = 1;
>  		if (setaffinity == AFFINITY_UNSPECIFIED)
>  			setaffinity = AFFINITY_USEALL;
>  	}
>  
> -	if (option_affinity) {
> -		if (smp)
> -			warn("-a ignored due to smp mode\n");
> +	if (option_affinity && smp) {
> +		warn("-a ignored due to smp mode\n");
> +		if (affinity_mask) {
> +			numa_bitmask_free(affinity_mask);
> +			affinity_mask = NULL;
> +		}
> +		setaffinity = AFFINITY_USEALL;
>  	}
>  
>  	if (smi) {
> @@ -1744,6 +1740,12 @@ int main(int argc, char **argv)
>  	int max_cpus = sysconf(_SC_NPROCESSORS_ONLN);
>  	int i, ret = -1;
>  	int status;
> +	void *stack;
> +	void *currstk;
> +	size_t stksize;
> +
> +	if (numa_initialize())
> +		fatal("Couldn't initialize libnuma");
>  
>  	process_options(argc, argv, max_cpus);
>  
> @@ -1926,34 +1928,27 @@ int main(int argc, char **argv)
>  		default: cpu = -1;
>  		}
>  
> -		node = -1;
> -		if (numa) {
> -			void *stack;
> -			void *currstk;
> -			size_t stksize;
> +		/* find the memory node associated with the cpu i */
> +		node = rt_numa_numa_node_of_cpu(cpu);
>  
> -			/* find the memory node associated with the cpu i */
> -			node = rt_numa_numa_node_of_cpu(cpu);
> +		/* get the stack size set for this thread */
> +		if (pthread_attr_getstack(&attr, &currstk, &stksize))
> +			fatal("failed to get stack size for thread %d\n", i);
>  
> -			/* get the stack size set for this thread */
> -			if (pthread_attr_getstack(&attr, &currstk, &stksize))
> -				fatal("failed to get stack size for thread %d\n", i);
> +		/* if the stack size is zero, set a default */
> +		if (stksize == 0)
> +			stksize = PTHREAD_STACK_MIN * 2;
>  
> -			/* if the stack size is zero, set a default */
> -			if (stksize == 0)
> -				stksize = PTHREAD_STACK_MIN * 2;
> +		/*  allocate memory for a stack on appropriate node */
> +		stack = rt_numa_numa_alloc_onnode(stksize, node, cpu);
>  
> -			/*  allocate memory for a stack on appropriate node */
> -			stack = rt_numa_numa_alloc_onnode(stksize, node, cpu);
> +		/* touch the stack pages to pre-fault them in */
> +		memset(stack, 0, stksize);
>  
> -			/* touch the stack pages to pre-fault them in */
> -			memset(stack, 0, stksize);
> -
> -			/* set the thread's stack */
> -			if (pthread_attr_setstack(&attr, stack, stksize))
> -				fatal("failed to set stack addr for thread %d to 0x%x\n",
> -				      i, stack+stksize);
> -		}
> +		/* set the thread's stack */
> +		if (pthread_attr_setstack(&attr, stack, stksize))
> +			fatal("failed to set stack addr for thread %d to 0x%x\n",
> +				i, stack+stksize);
>  
>  		/* allocate the thread's parameter block  */
>  		parameters[i] = par = threadalloc(sizeof(struct thread_param), node);
> diff --git a/src/cyclictest/rt_numa.h b/src/cyclictest/rt_numa.h
> index 46690941e0a6..8d02f419ed6d 100644
> --- a/src/cyclictest/rt_numa.h
> +++ b/src/cyclictest/rt_numa.h
> @@ -13,8 +13,6 @@
>  #include "rt-utils.h"
>  #include "error.h"
>  
> -static int numa = 0;
> -
>  #include <numa.h>
>  
>  static void *
> -- 
> 2.29.2
> 
> 
Signed-off-by: John Kacur <jkacur@redhat.com>

  reply	other threads:[~2021-01-27  3:55 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-18 16:18 [rt-tests v2 v2 00/20] rt-numa.h cleanups Daniel Wagner
2020-12-18 16:18 ` [rt-tests v2 v2 01/20] cyclictest: Always use libnuma Daniel Wagner
2021-01-26  5:10   ` John Kacur [this message]
2021-02-19 13:44   ` Kurt Kanzenbach
2021-02-19 14:12     ` Daniel Wagner
2021-02-19 14:39       ` Kurt Kanzenbach
2021-02-19 14:54         ` Daniel Wagner
2021-02-19 15:17           ` Sebastian Andrzej Siewior
2021-02-19 15:21             ` Christian Eggers
2021-02-19 16:16               ` Daniel Wagner
2021-02-19 16:21                 ` John Kacur
2021-02-19 16:27                   ` Christian Eggers
2021-02-19 16:35                     ` Daniel Wagner
2021-02-19 16:39                     ` John Kacur
2021-02-19 17:07                     ` John Kacur
2021-02-19 16:45     ` John Kacur
2020-12-18 16:18 ` [rt-tests v2 v2 02/20] cyclictest: Use numa API directly Daniel Wagner
2021-01-26  5:31   ` John Kacur
2021-01-26  8:11     ` Daniel Wagner
2020-12-18 16:18 ` [rt-tests v2 v2 03/20] cyclictest: Use affinity_mask for stearing thread placement Daniel Wagner
2020-12-18 16:18 ` [rt-tests v2 v2 04/20] cyclictest: Mimik --smp behavior with --affinity Daniel Wagner
2020-12-18 16:18 ` [rt-tests v2 v2 05/20] cyclictest: Simplify --smp vs --affinity vs --threads argument logic Daniel Wagner
2020-12-18 16:18 ` [rt-tests v2 v2 06/20] cyclictest: Move verbose message into main Daniel Wagner
2021-01-26  6:28   ` John Kacur
2020-12-18 16:18 ` [rt-tests v2 v2 07/20] signaltest: Always use libnuma Daniel Wagner
2021-01-26  6:29   ` John Kacur
2020-12-18 16:18 ` [rt-tests v2 v2 08/20] signaltest: Use affinity_mask for stearing thread placement Daniel Wagner
2021-01-26  6:31   ` John Kacur
2021-01-26  8:15     ` Daniel Wagner
2020-12-18 16:18 ` [rt-tests v2 v2 09/20] signaltest: Simplify --smp vs --affinity vs --threads argument logic Daniel Wagner
2020-12-18 16:18 ` [rt-tests v2 v2 10/20] rt-numa: Remove unused definitions and numa_initialize() Daniel Wagner
2020-12-18 16:18 ` [rt-tests v2 v2 11/20] rt-numa: Add generic cpu_for_thread() helper Daniel Wagner
2020-12-18 16:18 ` [rt-tests v2 v2 12/20] rt-numa: Use mask size for iterator limit Daniel Wagner
2020-12-18 16:18 ` [rt-tests v2 v2 13/20] rt-numa: Remove max_cpus argument from parse_cpusmask Daniel Wagner
2020-12-18 16:18 ` [rt-tests v2 v2 14/20] rt-numa: Use error message helpers Daniel Wagner
2021-01-26  6:40   ` John Kacur
2020-12-18 16:18 ` [rt-tests v2 v2 15/20] signaltest: Remove unused max_cpus argument from process_options Daniel Wagner
2020-12-18 16:18 ` [rt-tests v2 v2 16/20] cyclictest: " Daniel Wagner
2020-12-18 16:18 ` [rt-tests v2 v2 17/20] rt-numa: Use CPU_SETSIZE as upper loop limit Daniel Wagner
2020-12-18 16:18 ` [rt-tests v2 v2 18/20] rt-numa: Remove used max_cpus argument from cpu_for_thread() Daniel Wagner
2020-12-18 16:18 ` [rt-tests v2 v2 19/20] cyclictest: Remove max cpus used verbose information Daniel Wagner
2020-12-18 16:18 ` [rt-tests v2 v2 20/20] cyclictest: Remove unecessary local variable Daniel Wagner
2021-01-22 12:51 ` [rt-tests v2 v2 00/20] rt-numa.h cleanups Daniel Wagner
2021-01-26  5:04 ` John Kacur

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=cf944ef0-a7e1-c0ee-f0ad-f7b98b7a7412@redhat.com \
    --to=jkacur@redhat.com \
    --cc=dwagner@suse.de \
    --cc=linux-rt-users@vger.kernel.org \
    --cc=williams@redhat.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.