blob: 5c63dde1a454dd36470a0d38316291e9f2e387df [file] [log] [blame]
h3. Scheduling
h4. Scheduler to Core assignment
We distinguish between physical mapping and responsibility
* *Executing Core* means a scheduler produces algorithmic overhead on a core
* *Responsibility* means a scheduler controls the scheduling on core(s)
!../pictures/user-scheduling-sched-allocation.png!
h4. Task to Scheduler assignment
Tasks have a core affinity and are assigned to a scheduler
* *Core Affinity* Specifies the possible cores the task can run on. If only one core is specified, the task runs on this core. If multiple cores are specified, the task can migrate between the cores.
* *Scheduler* specifies the unique allocation of the task to a scheduler.
The scheduling parameters are determined by the scheduling algorithm and are only valid for this specific task - scheduler combination. Therefore the parameters are specified in the TaskAllocation object.
!../pictures/user-scheduling-task-allocation.svg!
h4. Scheduler hierarchies
Schedulers can be arranged in a hierarchy via SchedulerAssociations. If set, the parent scheduler takes the initial decision and delegates to a child-scheduler. If the child-scheduler is a reservation based server, it can only delegate scheduling decisions to its child scheduler. If it is not a server, it can take scheduling decisions.
The scheduling parameters for the parent scheduler are specified in the SchedulerAssociation, just as it would have for task allocations.
If a reservation based server has only one child (this can either be a process or a child scheduler), the scheduling parameters specified in this single child allocation will also be passed to the parent scheduler. The example below shows this for the EDF scheduler on the right hand side.
!../pictures/user-scheduling-hierarchy.svg!