Changing Affinity of Executing Thread

Joel Sherrill joel.sherrill at OARcorp.com
Tue May 20 15:32:43 UTC 2014


On 5/20/2014 1:18 AM, Sebastian Huber wrote:
> 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.
Great! I just worried about a window.  Better to ask than debug. :)
>> 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.
>
You asked earlier. I think changing affinity should work find from an
ISR. It is
just set state/clear state.

-- 
Joel Sherrill, Ph.D.             Director of Research & Development
joel.sherrill at OARcorp.com        On-Line Applications Research
Ask me about RTEMS: a free RTOS  Huntsville AL 35805
Support Available                (256) 722-9985




More information about the devel mailing list