On Tue, Jul 28, 2020 at 7:23 AM Richi Dubey <richidu...@gmail.com> wrote:
>
> Hi,
>
> I do not have much expertise in timers. I was wondering what the name ACTN 
> means/defines in the following context:
> https://git.rtems.org/rtems/tree/testsuites/smptests/smpschededf02/init.c#n368
>
> Please let me know.
>

Names aren't really relevant, just something picked by someone. In
this case, I think it is short-hand for "action" -- sometimes we say a
timer triggers an action/event.

> On Wed, Jul 22, 2020 at 6:46 PM Richi Dubey <richidu...@gmail.com> wrote:
>>
>> Thank you for the clarification.
>>
>> On Sat, Jul 18, 2020 at 9:06 PM Gedare Bloom <ged...@rtems.org> wrote:
>>>
>>> On Fri, Jul 17, 2020 at 2:22 AM Richi Dubey <richidu...@gmail.com> wrote:
>>> >>
>>> >>
>>> >> >   Scheduler_Node *nodes;
>>> >> > } Thread_Scheduler_control;
>>> >> >
>>> >> > Why do we have a Scheduler_Node *nodes? What does it indicate? Since 
>>> >> > the pointer can point to a single value, why is it being called nodes?
>>> >> >
>>> >> See cpukit/score/src/threadinitialize.c +153
>>> >
>>> >
>>> > Thank you for your help.
>>> > /**
>>> >    * @brief The scheduler nodes of this thread.
>>> >    *
>>> >    * Each thread has a scheduler node for each scheduler instance.
>>> >    */
>>> >
>>> > I went through the entire scheduler related code in threadinitialize.c 
>>> > and I understood that the scheduler node which belongs to the scheduler 
>>> > that is the home scheduler for a thread gets initialized with the 
>>> > thread's priority, while other scheduler nodes gets initialized with the 
>>> > max priority : for an idle thread case.
>>> >
>>> > But why do we have a scheduler node for each scheduler instance? Is it 
>>> > because the thread might migrate to a different processor to facilitate 
>>> > helping and would need a node belonging to the scheduler instance which 
>>> > owns the processor it is migrating to?
>>> >
>>>
>>> I'm not 100% sure on this, but I believe it is because the thread's
>>> priority needs to be considered globally when taking
>>> scheduling/synchronization decisions.
>>>
>>> > On Wed, Jul 15, 2020 at 10:12 PM Gedare Bloom <ged...@rtems.org> wrote:
>>> >>
>>> >> On Wed, Jul 15, 2020 at 6:55 AM Richi Dubey <richidu...@gmail.com> wrote:
>>> >> >
>>> >> > Another quick question:
>>> >> > typedef struct {
>>> >> >
>>> >> > #if defined(RTEMS_SMP)
>>> >> > ...
>>> >> >   Chain_Control Scheduler_nodes;
>>> >> >
>>> >> > #endif
>>> >> > /**
>>> >> >    * @brief The scheduler nodes of this thread.
>>> >> >    *
>>> >> >    * Each thread has a scheduler node for each scheduler instance.
>>> >> >    */
>>> >> >   Scheduler_Node *nodes;
>>> >> > } Thread_Scheduler_control;
>>> >> >
>>> >> > Why do we have a Scheduler_Node *nodes? What does it indicate? Since 
>>> >> > the pointer can point to a single value, why is it being called nodes?
>>> >> >
>>> >>
>>> >> See cpukit/score/src/threadinitialize.c +153
>>> >>
>>> >>
>>> >> >
>>> >> > On Wed, Jul 15, 2020 at 5:57 PM Richi Dubey <richidu...@gmail.com> 
>>> >> > wrote:
>>> >> >>
>>> >> >> Hi,
>>> >> >>
>>> >> >> I had a small question. The scheduler struct inside percpu.h looks 
>>> >> >> like:
>>> >> >> ------------------------------------------------------------------------------------------------------
>>> >> >>     struct {
>>> >> >>       /**
>>> >> >>        * @brief The scheduler control of the scheduler owning this 
>>> >> >> processor.
>>> >> >>        *
>>> >> >>        * This pointer is NULL in case this processor is currently not 
>>> >> >> used by a
>>> >> >>        * scheduler instance.
>>> >> >>        */
>>> >> >>       const struct _Scheduler_Control *control;
>>> >> >>
>>> >> >>       /**
>>> >> >>        * @brief The scheduler context of the scheduler owning this 
>>> >> >> processor.
>>> >> >>        *
>>> >> >>        * This pointer is NULL in case this processor is currently not 
>>> >> >> used by a
>>> >> >>        * scheduler instance.
>>> >> >>        */
>>> >> >>       const struct Scheduler_Context *context;
>>> >> >>
>>> >> >>       /**
>>> >> >>        * @brief The idle thread for this processor in case it is 
>>> >> >> online and
>>> >> >>        * currently not used by a scheduler instance.
>>> >> >>        */
>>> >> >>       struct _Thread_Control *idle_if_online_and_unused;
>>> >> >>     } Scheduler;
>>> >> >> ------------------------------------------------------------------------------------------------------
>>> >> >> So, does this mean a CPU when active is always either executing an 
>>> >> >> idle thread and is not being used by a scheduler (so has a thread 
>>> >> >> attribute in the idle_if_online_and_unused), or is used by a 
>>> >> >> scheduler and is executing a task ( which can not be an idle task)? 
>>> >> >> Another equivalent question is do we have an idle scheduler node, 
>>> >> >> like we have idle predefined threads that run on a CPU?
>>> >> >>
>>> >>
>>> >> Not exactly. What I understand is that:
>>> >> * When a processor is online (active), but not used by a scheduler,
>>> >> then it executes an idle task.
>>> >> * When a processor is online and used by a scheduler, it may be
>>> >> executing any task including an idle task.
>>> >>
>>> >> You can find the relevant code in 
>>> >> cpukit/include/rtems/score/schedulersmpimpl.h
>>> >>
>>> >> The idle threads are specially handled when processors are
>>> >> added/removed from scheduler contexts. A scheduler keeps a chain of
>>> >> its idle threads:
>>> >> cpukit/include/rtems/score/schedulersmp.h +64
>>> >>
>>> >> >> Please let me know,
>>> >> >> Thanks.
>>> >> >>
>>> >> >> On Tue, Jul 14, 2020 at 8:28 PM Richi Dubey <richidu...@gmail.com> 
>>> >> >> wrote:
>>> >> >>>
>>> >> >>> I understand. Thank you.
>>> >> >>>
>>> >> >>> On Tue, Jul 14, 2020 at 7:05 PM Sebastian Huber 
>>> >> >>> <sebastian.hu...@embedded-brains.de> wrote:
>>> >> >>>>
>>> >> >>>> On 14/07/2020 13:37, Richi Dubey wrote:
>>> >> >>>>
>>> >> >>>> >     Here we remove the affine ready queue if it
>>> >> >>>> >     exists from the chain of affine queues since now an affine 
>>> >> >>>> > thread is
>>> >> >>>> >     scheduled on a processor.
>>> >> >>>> >
>>> >> >>>> > Why are we removing the entire affine queue corresponding to a
>>> >> >>>> > CPU when a single node of the queue gets scheduled?
>>> >> >>>> Because the highest priority affine thread is now a schedule one.
>>> >> >
>>> >> > _______________________________________________
>>> >> > devel mailing list
>>> >> > devel@rtems.org
>>> >> > http://lists.rtems.org/mailman/listinfo/devel
_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to