diff mbox series

[rt-tests,v2,1/3] rt-numa: Use sched_getaffinity() instead of pthread_getaffinity_np()

Message ID 20210708151827.21430-2-dwagner@suse.de
State Superseded
Headers show
Series Fix a few fallouts | expand

Commit Message

Daniel Wagner July 8, 2021, 3:18 p.m. UTC
pthread_getaffinity_np() prevents static builds as glibc does not
expose it for this configuration. Instead use sched_getaffinity()
which is always present and has the exact same semantics.

Fixes: f240656b056b ("rt-tests: cyclictest: Fix -t without a user specified [NUM]")

Signed-off-by: Daniel Wagner <dwagner@suse.de>
---
 src/lib/rt-numa.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

Comments

John Kacur July 9, 2021, 5:58 p.m. UTC | #1
On Thu, 8 Jul 2021, Daniel Wagner wrote:

> pthread_getaffinity_np() prevents static builds as glibc does not

> expose it for this configuration. Instead use sched_getaffinity()

> which is always present and has the exact same semantics.

> 

> Fixes: f240656b056b ("rt-tests: cyclictest: Fix -t without a user specified [NUM]")

> 

> Signed-off-by: Daniel Wagner <dwagner@suse.de>

> ---

>  src/lib/rt-numa.c | 6 ++----

>  1 file changed, 2 insertions(+), 4 deletions(-)

> 

> diff --git a/src/lib/rt-numa.c b/src/lib/rt-numa.c

> index babcc634d57e..bb0121a65eca 100644

> --- a/src/lib/rt-numa.c

> +++ b/src/lib/rt-numa.c

> @@ -68,15 +68,13 @@ int cpu_for_thread_sp(int thread_num, int max_cpus, struct bitmask *cpumask)

>  int cpu_for_thread_ua(int thread_num, int max_cpus)

>  {

>  	int res, num_cpus, i, m, cpu;

> -	pthread_t thread;

>  	cpu_set_t cpuset;

>  

> -	thread = pthread_self();

>  	CPU_ZERO(&cpuset);

>  

> -	res = pthread_getaffinity_np(thread, sizeof(cpu_set_t), &cpuset);

> +	res = sched_getaffinity(0, sizeof(cpu_set_t), &cpuset);

>  	if (res != 0)

> -		fatal("pthread_getaffinity_np failed: %s\n", strerror(res));

> +		fatal("sched_getaffinity failed: %s\n", strerror(res));

>  

>  	num_cpus = CPU_COUNT(&cpuset);

>  	m = thread_num % num_cpus;

> -- 

> 2.32.0

> 

> 


It looks okay on the surface but I would like to know where you tested.

Also, in your message you explain that you can't do a static build
but we never made static builds a requirment for rt-tests. I know from
your cover letter than you are trying to do something with arm, if this
is your motivation you should put it in your message. Even if this is your 
motivation is there a reason we have to have a static build there?

Finally, you put "fixes f240656b056b", it is useful to know where this
was introduced in trying to figure out whether we can really replace a 
pthread call with the sched call, but then phrase it that way, because
as far as I know that commit is not a problem needing fixing, so put
"pthread_getaffinity_np call introduced in f240656b056b"
or something like that.

Thanks

John
Daniel Wagner July 19, 2021, 8 a.m. UTC | #2
On Fri, Jul 09, 2021 at 01:58:51PM -0400, John Kacur wrote:
> It looks okay on the surface but I would like to know where you tested.


x86_64 and armv7. FWIW, pthread_getaffinity_np() is a fancy wrapper
around sched_getaffinity():

  https://github.com/bminor/glibc/blob/master/nptl/pthread_getaffinity.c#L34

> Also, in your message you explain that you can't do a static build

> but we never made static builds a requirment for rt-tests.


So you are saying static builds are not supported at all?

> I know from

> your cover letter than you are trying to do something with arm, if this

> is your motivation you should put it in your message. Even if this is your 

> motivation is there a reason we have to have a static build there?


Sure thing, I'll add more to the commit message. I just find it strange
that you are starting to argue static builds are not supported. This is
very handy especially since the linker dependency on libnuma. I can drop
the binary on the target without the need to install libnuma into the
rootfs. It is not available on all distro for armv7.

Another user of static builds is the LAVA test suite. It ships the
rt-tests programs as static builds so that the test can run without the
need to pre populate the rootfs with the correct binary:

  https://github.com/Linaro/test-definitions/tree/master/automated/linux/cyclictest/bin
  https://github.com/Linaro/test-definitions/blob/master/automated/linux/cyclictest/cyclictest.sh#L41

I am not really a big fan of this either and wont defend it. I am just
listening existing users.

> Finally, you put "fixes f240656b056b", it is useful to know where this

> was introduced in trying to figure out whether we can really replace a 

> pthread call with the sched call, but then phrase it that way, because

> as far as I know that commit is not a problem needing fixing, so put

> "pthread_getaffinity_np call introduced in f240656b056b"

> or something like that.


From my POV it is fixing a bug. If you decide static builds are not
supported, please say so. This allows me to discuss this issue with the
LAVA folks.

Thanks,
Daniel
diff mbox series

Patch

diff --git a/src/lib/rt-numa.c b/src/lib/rt-numa.c
index babcc634d57e..bb0121a65eca 100644
--- a/src/lib/rt-numa.c
+++ b/src/lib/rt-numa.c
@@ -68,15 +68,13 @@  int cpu_for_thread_sp(int thread_num, int max_cpus, struct bitmask *cpumask)
 int cpu_for_thread_ua(int thread_num, int max_cpus)
 {
 	int res, num_cpus, i, m, cpu;
-	pthread_t thread;
 	cpu_set_t cpuset;
 
-	thread = pthread_self();
 	CPU_ZERO(&cpuset);
 
-	res = pthread_getaffinity_np(thread, sizeof(cpu_set_t), &cpuset);
+	res = sched_getaffinity(0, sizeof(cpu_set_t), &cpuset);
 	if (res != 0)
-		fatal("pthread_getaffinity_np failed: %s\n", strerror(res));
+		fatal("sched_getaffinity failed: %s\n", strerror(res));
 
 	num_cpus = CPU_COUNT(&cpuset);
 	m = thread_num % num_cpus;