sched: optimize task_tick_rt() a bit
Mitchell Erblich suggested a quality-of-implementation change to not requeue SCHED_RR tasks if there's only a single task on the runqueue, by checking for rq->nr_running == 1. provide a more efficient implementation of that, to check that particular RT priority-queue only. [ From: mingo@elte.hu ] Also first requeue the task then set need_resched - results in slightly better machine-instruction ordering. Also clean up the code a bit. Signed-off-by: Dmitry Adamushko <dmitry.adamushko@gmail.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
deac4ee65a
commit
98fbc79853
1 changed files with 8 additions and 3 deletions
|
@ -207,10 +207,15 @@ static void task_tick_rt(struct rq *rq, struct task_struct *p)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
p->time_slice = static_prio_timeslice(p->static_prio);
|
p->time_slice = static_prio_timeslice(p->static_prio);
|
||||||
set_tsk_need_resched(p);
|
|
||||||
|
|
||||||
/* put it at the end of the queue: */
|
/*
|
||||||
requeue_task_rt(rq, p);
|
* Requeue to the end of queue if we are not the only element
|
||||||
|
* on the queue:
|
||||||
|
*/
|
||||||
|
if (p->run_list.prev != p->run_list.next) {
|
||||||
|
requeue_task_rt(rq, p);
|
||||||
|
set_tsk_need_resched(p);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct sched_class rt_sched_class __read_mostly = {
|
static struct sched_class rt_sched_class __read_mostly = {
|
||||||
|
|
Loading…
Reference in a new issue