score: Strong APA scheduler processor allocation

Use _Scheduler_SMP_Allocate_processor_exact() to prevent unexpected
migrations.
This commit is contained in:
Sebastian Huber
2016-06-30 09:51:18 +02:00
parent 029877282e
commit 09c87fb06b
3 changed files with 24 additions and 24 deletions
@@ -487,6 +487,27 @@ static inline void _Scheduler_SMP_Allocate_processor_lazy(
}
}
/*
* This method is slightly different from
* _Scheduler_SMP_Allocate_processor_lazy() in that it does what it is asked to
* do. _Scheduler_SMP_Allocate_processor_lazy() attempts to prevent migrations
* but does not take into account affinity.
*/
static inline void _Scheduler_SMP_Allocate_processor_exact(
Scheduler_Context *context,
Thread_Control *scheduled_thread,
Thread_Control *victim_thread
)
{
Per_CPU_Control *victim_cpu = _Thread_Get_CPU( victim_thread );
Per_CPU_Control *cpu_self = _Per_CPU_Get();
(void) context;
_Thread_Set_CPU( scheduled_thread, victim_cpu );
_Thread_Dispatch_update_heir( cpu_self, victim_cpu, scheduled_thread );
}
static inline void _Scheduler_SMP_Allocate_processor(
Scheduler_Context *context,
Scheduler_Node *scheduled,
@@ -112,27 +112,6 @@ void _Scheduler_priority_affinity_SMP_Node_initialize(
node->Affinity.set = &node->Affinity.preallocated;
}
/*
* This method is slightly different from
* _Scheduler_SMP_Allocate_processor_lazy() in that it does what it is asked to
* do. _Scheduler_SMP_Allocate_processor_lazy() attempts to prevent migrations
* but does not take into account affinity.
*/
static inline void _Scheduler_SMP_Allocate_processor_exact(
Scheduler_Context *context,
Thread_Control *scheduled_thread,
Thread_Control *victim_thread
)
{
Per_CPU_Control *victim_cpu = _Thread_Get_CPU( victim_thread );
Per_CPU_Control *cpu_self = _Per_CPU_Get();
(void) context;
_Thread_Set_CPU( scheduled_thread, victim_cpu );
_Thread_Dispatch_update_heir( cpu_self, victim_cpu, scheduled_thread );
}
/*
* This method is unique to this scheduler because it takes into
* account affinity as it determines the highest ready thread.
+3 -3
View File
@@ -225,7 +225,7 @@ void _Scheduler_strong_APA_Block(
_Scheduler_strong_APA_Extract_from_ready,
_Scheduler_strong_APA_Get_highest_ready,
_Scheduler_strong_APA_Move_from_ready_to_scheduled,
_Scheduler_SMP_Allocate_processor_lazy
_Scheduler_SMP_Allocate_processor_exact
);
}
@@ -247,7 +247,7 @@ static Thread_Control *_Scheduler_strong_APA_Enqueue_ordered(
insert_scheduled,
_Scheduler_strong_APA_Move_from_scheduled_to_ready,
_Scheduler_SMP_Get_lowest_scheduled,
_Scheduler_SMP_Allocate_processor_lazy
_Scheduler_SMP_Allocate_processor_exact
);
}
@@ -300,7 +300,7 @@ static Thread_Control *_Scheduler_strong_APA_Enqueue_scheduled_ordered(
insert_ready,
insert_scheduled,
_Scheduler_strong_APA_Move_from_ready_to_scheduled,
_Scheduler_SMP_Allocate_processor_lazy
_Scheduler_SMP_Allocate_processor_exact
);
}