Re: [rt-tests v1 6/6] oslat: Use parse_cpumask() from rt-numa.h

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On Fri, 13 Nov 2020, Daniel Wagner wrote:

> Use the common parse_cpumask() helper and use struct bitmask directly
> instead transforming it into a CPU_SET first.
> 
> Signed-off-by: Daniel Wagner <dwagner@xxxxxxx>
> ---
>  src/oslat/oslat.c | 55 +++++++++++++++--------------------------------
>  1 file changed, 17 insertions(+), 38 deletions(-)
> 
> diff --git a/src/oslat/oslat.c b/src/oslat/oslat.c
> index b2aa15001be2..5b7e0d5b5d5c 100644
> --- a/src/oslat/oslat.c
> +++ b/src/oslat/oslat.c
> @@ -42,6 +42,7 @@
>  #include <sys/syscall.h>
>  
>  #include "rt-utils.h"
> +#include "rt-numa.h"
>  #include "error.h"
>  
>  #ifdef __GNUC__
> @@ -542,37 +543,6 @@ static void usage(int error)
>  	exit(error);
>  }
>  
> -/* TODO: use libnuma? */
> -static int parse_cpu_list(char *cpu_list, cpu_set_t *cpu_set)
> -{
> -	struct bitmask *cpu_mask;
> -	int i, n_cores;
> -
> -	n_cores = sysconf(_SC_NPROCESSORS_CONF);
> -
> -	if (!cpu_list) {
> -		for (i = 0; i < n_cores; i++)
> -			CPU_SET(i, cpu_set);
> -		return n_cores;
> -	}
> -
> -	cpu_mask = numa_parse_cpustring_all(cpu_list);
> -	if (cpu_mask) {
> -		for (i = 0; i < n_cores; i++) {
> -			if (numa_bitmask_isbitset(cpu_mask, i))
> -				CPU_SET(i, cpu_set);
> -		}
> -		numa_bitmask_free(cpu_mask);
> -	} else {
> -		warn("Unknown cpu-list: %s, using all available cpus\n", cpu_list);
> -		for (i = 0; i < n_cores; i++)
> -			CPU_SET(i, cpu_set);
> -	}
> -
> -	return n_cores;
> -}
> -
> -
>  static int workload_select(char *name)
>  {
>  	int i = 0;
> @@ -745,15 +715,18 @@ int main(int argc, char *argv[])
>  {
>  	struct thread *threads;
>  	int i, n_cores;
> -	cpu_set_t cpu_set;
> +	struct bitmask *cpu_set = NULL;
> +	int max_cpus = sysconf(_SC_NPROCESSORS_ONLN);
>  
>  #ifdef FRC_MISSING
>  	printf("This architecture is not yet supported. "
>  	       "Please implement frc() function first for %s.\n", argv[0]);
>  	return 0;
>  #endif
> -
> -	CPU_ZERO(&cpu_set);
> +	if (numa_available() == -1) {
> +		printf("ERROR: Could not initialize libnuma\n");
> +		exit(1);
> +	}
>  
>  	g.app_name = argv[0];
>  	g.rtprio = 0;
> @@ -768,16 +741,22 @@ int main(int argc, char *argv[])
>  
>  	TEST(mlockall(MCL_CURRENT | MCL_FUTURE) == 0);
>  
> -	n_cores = parse_cpu_list(g.cpu_list, &cpu_set);
> +	if (!g.cpu_list)
> +		g.cpu_list = strdup("all");
> +	if (parse_cpumask(g.cpu_list, max_cpus, &cpu_set))
> +		exit(1);
> +	n_cores = numa_bitmask_weight(cpu_set);
>  
> -	TEST(threads = calloc(1, CPU_COUNT(&cpu_set) * sizeof(threads[0])));
> +	TEST(threads = calloc(1, n_cores * sizeof(threads[0])));
>  	for (i = 0; i < n_cores; ++i)
> -		if (CPU_ISSET(i, &cpu_set) && move_to_core(i) == 0)
> +		if (numa_bitmask_isbitset(cpu_set, i) && move_to_core(i) == 0)
>  			threads[g.n_threads_total++].core_i = i;
>  
> -	if (CPU_ISSET(0, &cpu_set) && g.rtprio)
> +	if (numa_bitmask_isbitset(cpu_set, 0) && g.rtprio)
>  		printf("WARNING: Running SCHED_FIFO workload on CPU 0 may hang the thread\n");
>  
> +	numa_bitmask_free(cpu_set);
> +
>  	TEST(move_to_core(g.cpu_main_thread) == 0);
>  
>  	signal(SIGALRM, handle_alarm);
> -- 
> 2.29.2
> 
> 
    minor edit to the message
    Signed-off-by: John Kacur <jkacur@xxxxxxxxxx>




[Index of Archives]     [RT Stable]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]

  Powered by Linux