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 02/20] cyclictest: Use numa API directly
Date: Tue, 26 Jan 2021 00:31:37 -0500 (EST) [thread overview]
Message-ID: <4a45a1e8-1535-375-dd18-c5cb872c2c1@redhat.com> (raw)
In-Reply-To: <20201218161843.1764-3-dwagner@suse.de>
On Fri, 18 Dec 2020, Daniel Wagner wrote:
> There is no need for small libnuma wrappers functions as we always
> use libnuma. Remove them and get rid of rt_numa.h, so there is
> no confusion with rt-numa.h anymore.
>
> Signed-off-by: Daniel Wagner <dwagner@suse.de>
> ---
> src/cyclictest/cyclictest.c | 41 ++++++++--------
> src/cyclictest/rt_numa.h | 96 -------------------------------------
> 2 files changed, 22 insertions(+), 115 deletions(-)
> delete mode 100644 src/cyclictest/rt_numa.h
>
> diff --git a/src/cyclictest/cyclictest.c b/src/cyclictest/cyclictest.c
> index 514ed7b20fdb..a5ca764da254 100644
> --- a/src/cyclictest/cyclictest.c
> +++ b/src/cyclictest/cyclictest.c
> @@ -33,10 +33,10 @@
> #include <sys/utsname.h>
> #include <sys/mman.h>
> #include <sys/syscall.h>
> -#include "rt_numa.h"
>
> #include "rt-utils.h"
> #include "rt-numa.h"
> +#include "error.h"
>
> #include <bionic.h>
>
> @@ -514,9 +514,9 @@ static void *timerthread(void *param)
>
> memset(&stop, 0, sizeof(stop));
>
> - /* if we're running in numa mode, set our memory node */
> - if (par->node != -1)
> - rt_numa_set_numa_run_on_node(par->node, par->cpu);
> + if (numa_run_on_node(par->node))
> + warn("Could not set NUMA node %d for thread %d: %s\n",
> + par->node, par->cpu, strerror(errno));
>
> if (par->cpu != -1) {
> CPU_ZERO(&mask);
> @@ -1275,7 +1275,7 @@ static void process_options(int argc, char *argv[], int max_cpus)
> }
> if (error) {
> if (affinity_mask)
> - rt_bitmask_free(affinity_mask);
> + numa_bitmask_free(affinity_mask);
> display_help(1);
> }
> }
> @@ -1929,7 +1929,7 @@ int main(int argc, char **argv)
> }
>
> /* find the memory node associated with the cpu i */
> - node = rt_numa_numa_node_of_cpu(cpu);
> + node = numa_node_of_cpu(cpu);
You've eliminated the error handling that was in the wrapper here.
>
> /* get the stack size set for this thread */
> if (pthread_attr_getstack(&attr, &currstk, &stksize))
> @@ -1940,7 +1940,10 @@ int main(int argc, char **argv)
> stksize = PTHREAD_STACK_MIN * 2;
>
> /* allocate memory for a stack on appropriate node */
> - stack = rt_numa_numa_alloc_onnode(stksize, node, cpu);
> + stack = numa_alloc_onnode(stksize, node);
> + if (!stack)
> + fatal("failed to allocate %d bytes on node %d for cpu %d\n",
> + stksize, node, cpu);
>
> /* touch the stack pages to pre-fault them in */
> memset(stack, 0, stksize);
> @@ -1951,13 +1954,13 @@ int main(int argc, char **argv)
> i, stack+stksize);
>
> /* allocate the thread's parameter block */
> - parameters[i] = par = threadalloc(sizeof(struct thread_param), node);
> + parameters[i] = par = numa_alloc_onnode(sizeof(struct thread_param), node);
> if (par == NULL)
> fatal("error allocating thread_param struct for thread %d\n", i);
> memset(par, 0, sizeof(struct thread_param));
>
> /* allocate the thread's statistics block */
> - statistics[i] = stat = threadalloc(sizeof(struct thread_stat), node);
> + statistics[i] = stat = numa_alloc_onnode(sizeof(struct thread_stat), node);
> if (stat == NULL)
> fatal("error allocating thread status struct for thread %d\n", i);
> memset(stat, 0, sizeof(struct thread_stat));
> @@ -1966,8 +1969,8 @@ int main(int argc, char **argv)
> if (histogram) {
> int bufsize = histogram * sizeof(long);
>
> - stat->hist_array = threadalloc(bufsize, node);
> - stat->outliers = threadalloc(bufsize, node);
> + stat->hist_array = numa_alloc_onnode(bufsize, node);
> + stat->outliers = numa_alloc_onnode(bufsize, node);
> if (stat->hist_array == NULL || stat->outliers == NULL)
> fatal("failed to allocate histogram of size %d on node %d\n",
> histogram, i);
> @@ -1977,14 +1980,14 @@ int main(int argc, char **argv)
>
> if (verbose) {
> int bufsize = VALBUF_SIZE * sizeof(long);
> - stat->values = threadalloc(bufsize, node);
> + stat->values = numa_alloc_onnode(bufsize, node);
> if (!stat->values)
> goto outall;
> memset(stat->values, 0, bufsize);
> par->bufmsk = VALBUF_SIZE - 1;
> if (smi) {
> int bufsize = VALBUF_SIZE * sizeof(long);
> - stat->smis = threadalloc(bufsize, node);
> + stat->smis = numa_alloc_onnode(bufsize, node);
> if (!stat->smis)
> goto outall;
> memset(stat->smis, 0, bufsize);
> @@ -2099,7 +2102,7 @@ int main(int argc, char **argv)
> print_stat(stdout, parameters[i], i, 0, 0);
> }
> if (statistics[i]->values)
> - threadfree(statistics[i]->values, VALBUF_SIZE*sizeof(long), parameters[i]->node);
> + numa_free(statistics[i]->values, VALBUF_SIZE*sizeof(long));
> }
>
> if (trigger)
> @@ -2108,8 +2111,8 @@ int main(int argc, char **argv)
> if (histogram) {
> print_hist(parameters, num_threads);
> for (i = 0; i < num_threads; i++) {
> - threadfree(statistics[i]->hist_array, histogram*sizeof(long), parameters[i]->node);
> - threadfree(statistics[i]->outliers, histogram*sizeof(long), parameters[i]->node);
> + numa_free(statistics[i]->hist_array, histogram*sizeof(long));
> + numa_free(statistics[i]->outliers, histogram*sizeof(long));
> }
> }
>
> @@ -2125,14 +2128,14 @@ int main(int argc, char **argv)
> for (i=0; i < num_threads; i++) {
> if (!statistics[i])
> continue;
> - threadfree(statistics[i], sizeof(struct thread_stat), parameters[i]->node);
> + numa_free(statistics[i], sizeof(struct thread_stat));
> }
>
> outpar:
> for (i = 0; i < num_threads; i++) {
> if (!parameters[i])
> continue;
> - threadfree(parameters[i], sizeof(struct thread_param), parameters[i]->node);
> + numa_free(parameters[i], sizeof(struct thread_param));
> }
> out:
> /* close any tracer file descriptors */
> @@ -2147,7 +2150,7 @@ int main(int argc, char **argv)
> close(latency_target_fd);
>
> if (affinity_mask)
> - rt_bitmask_free(affinity_mask);
> + numa_bitmask_free(affinity_mask);
>
> /* Remove running status shared memory file if it exists */
> if (rstat_fd >= 0)
> diff --git a/src/cyclictest/rt_numa.h b/src/cyclictest/rt_numa.h
> deleted file mode 100644
> index 8d02f419ed6d..000000000000
> --- a/src/cyclictest/rt_numa.h
> +++ /dev/null
> @@ -1,96 +0,0 @@
> -// SPDX-License-Identifier: GPL-2.0-or-later
> -/*
> - * A numa library for cyclictest.
> - *
> - * (C) 2010 John Kacur <jkacur@redhat.com>
> - * (C) 2010 Clark Williams <williams@redhat.com>
> - *
> - */
> -
> -#ifndef _RT_NUMA_H
> -#define _RT_NUMA_H
> -
> -#include "rt-utils.h"
> -#include "error.h"
> -
> -#include <numa.h>
> -
> -static void *
> -threadalloc(size_t size, int node)
> -{
> - if (node == -1)
> - return malloc(size);
> - return numa_alloc_onnode(size, node);
> -}
> -
> -static void
> -threadfree(void *ptr, size_t size, int node)
> -{
> - if (node == -1)
> - free(ptr);
> - else
> - numa_free(ptr, size);
> -}
> -
> -static void rt_numa_set_numa_run_on_node(int node, int cpu)
> -{
> - int res;
> - res = numa_run_on_node(node);
> - if (res)
> - warn("Could not set NUMA node %d for thread %d: %s\n",
> - node, cpu, strerror(errno));
> - return;
> -}
> -
> -static void *rt_numa_numa_alloc_onnode(size_t size, int node, int cpu)
> -{
> - void *stack;
> - stack = numa_alloc_onnode(size, node);
> - if (stack == NULL)
> - fatal("failed to allocate %d bytes on node %d for cpu %d\n",
> - size, node, cpu);
> - return stack;
> -}
> -
> -/*
> - * Use new bit mask CPU affinity behavior
> - */
> -static int rt_numa_numa_node_of_cpu(int cpu)
> -{
> - int node;
> - node = numa_node_of_cpu(cpu);
> - if (node == -1)
> - fatal("invalid cpu passed to numa_node_of_cpu(%d)\n", cpu);
> - return node;
> -}
> -
> -static inline unsigned int rt_numa_bitmask_isbitset( const struct bitmask *mask,
> - unsigned long i)
> -{
> - return numa_bitmask_isbitset(mask,i);
> -}
> -
> -static inline struct bitmask* rt_numa_parse_cpustring(const char* s,
> - int max_cpus)
> -{
> - return numa_parse_cpustring_all(s);
> -}
> -
> -static inline void rt_bitmask_free(struct bitmask *mask)
> -{
> - numa_bitmask_free(mask);
> -}
> -
> -/** Returns number of bits set in mask. */
> -static inline unsigned int rt_numa_bitmask_count(const struct bitmask *mask)
> -{
> - unsigned int num_bits = 0, i;
> - for (i = 0; i < mask->size; i++) {
> - if (rt_numa_bitmask_isbitset(mask, i))
> - num_bits++;
> - }
> - /* Could stash this instead of recomputing every time. */
> - return num_bits;
> -}
> -
> -#endif /* _RT_NUMA_H */
> --
> 2.29.2
>
>
next prev parent 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
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 [this message]
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=4a45a1e8-1535-375-dd18-c5cb872c2c1@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 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).