[PATCH] eal/unix: optimize thread creation with glibc

Stephen Hemminger stephen at networkplumber.org
Sat Nov 2 20:58:46 CET 2024


On Sat,  2 Nov 2024 11:08:39 +0100
David Marchand <david.marchand at redhat.com> wrote:

> Setting the cpu affinity of the child thread from the parent thread is
> racy when using pthread_setaffinity_np, as the child thread may start
> running and initialize before affinity is set.
> 
> On the other hand, setting the cpu affinity from the child thread itself
> may fail, so the parent thread waits for the child thread to report
> whether this call succeeded.
> 
> This synchronisation point resulted in a significant slow down of
> rte_thread_create() (as seen in the lcores_autotest unit tests, in OBS
> for some ARM systems).
> 
> Another option for setting cpu affinity is to use the not portable
> pthread_attr_setaffinity_np, but it is not available with musl.
> Assume availability by relying on __USE_GNU that is not set with musl.
> 
> Fixes: b28c6196b132 ("eal/unix: fix thread creation")
> Cc: stable at dpdk.org
> 
> Signed-off-by: David Marchand <david.marchand at redhat.com>
> ---

Seems like a reasonable way forward but not sure.

What about FreeBSD (which shares this code)?

Looking inside glibc, what it does is have the parent call sched_setaffinty()
after the clone system call with the thread id. So using attributes is
just as racy as the original code.


More information about the dev mailing list