Changing Affinity of Executing Thread

Sebastian Huber sebastian.huber at embedded-brains.de
Tue May 20 06:18:25 UTC 2014


On 2014-05-20 01:39, Joel Sherrill wrote:
> Hi
>
> I have set affinity and unblock logic in place and am testing scenarios.
> I still have to work on blocking.
>
> I am playing with a scenario now that changes the affinity of a thread
> that is executing. I am concerned that changing the affinity of a thread
> that is executing may have a window to address similar to restart of
> self. You are still executing on the core but could be moved as part of
> setting affinity.
>
> Before the set affinity of smp1  to core 1 is executed, the set of the
> tasks
>
>            EXECUTING      /   HEIR             / SWITCH NEEDED
>    CPU 0: 0x0a010004 @  5 / 0x0a010004 @  5          false (smp4)
>    CPU 1: 0x0a010003 @  6 / 0x0a010003 @  6          false (smp3)
>    CPU 2: 0x0a010002 @  6 / 0x0a010002 @  6          false (smp2)
>    CPU 3: 0x0a010001 @  5 / 0x0a010001 @  5          false (smp1)
>
> When set affinity internally sets the state of smp1 to STATES_MIGRATE,
> the heir on cpu 3 is changed to smp5.
>
> The affinity is updated and when STATES_MIGRATE is cleared, smp1 is
> declared heir on cpu 2.
>
> It is still executing on cpu 3 when it is declared heir on cpu 2.
>
> Wouldn't  changing the scheduler for the executing thread have
> a similar issue? You need to finish up the thread with one scheduler
> before moving it.

This is not a problem since this commit:

http://git.rtems.org/rtems/commit/?id=38b59a6d3052654e356ae16b4a243c362312acce

See also

http://git.rtems.org/rtems/tree/testsuites/smptests/smpmigration02/init.c

The key point is that the is executing indicator moved to the thread context 
and the low-level context switch is responsible for it.  There exists a point 
in time on which a processor executes no context during a context switch.

>
> What happens if you end up with a combination of these
> actions at the same time? restart, scheduler change, affinity change.

Currently a scheduler change must not be issued in interrupt context.  Apart 
from this everything works fine even if you restart a thread during a scheduler 
change since thread dispatching is disabled.

-- 
Sebastian Huber, embedded brains GmbH

Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone   : +49 89 189 47 41-16
Fax     : +49 89 189 47 41-09
E-Mail  : sebastian.huber at embedded-brains.de
PGP     : Public key available on request.

Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.



More information about the devel mailing list