On Fri, 2013-02-08 at 12:11 +0100, Vincent Guittot wrote: > When a RT task is scheduled on an idle CPU, the update of the rq's load is > not done because CFS's functions are not called. Then, the idle_balance, > which is called just before entering the idle function, updates the > rq's load and makes the assumption that the elapsed time since the last > update, was only running time. > > The rq's load of a CPU that only runs a periodic RT task, is close to > LOAD_AVG_MAX whatever the running duration of the RT task is. > > A new idle_exit function is called when the prev task is the idle function > so the elapsed time will be accounted as idle time in the rq's load. > > Signed-off-by: Vincent Guittot <vincent.guit...@linaro.org> > --- > kernel/sched/core.c | 3 +++ > kernel/sched/fair.c | 10 ++++++++++ > kernel/sched/sched.h | 5 +++++ > 3 files changed, 18 insertions(+) > > diff --git a/kernel/sched/core.c b/kernel/sched/core.c > index 26058d0..592e06c 100644 > --- a/kernel/sched/core.c > +++ b/kernel/sched/core.c > @@ -2927,6 +2927,9 @@ need_resched: > > pre_schedule(rq, prev); > > + if (unlikely(prev == rq->idle)) > + idle_exit(cpu, rq); > +
Let's get rid of the added junk in the core code that should be isolated in the idle code. I posted these patches before, and I'm about to post again: https://lkml.org/lkml/2012/12/21/378 https://lkml.org/lkml/2012/12/21/377 I'm working to clean these patches up today and post them again. Would working on top of these work for you? -- Steve > if (unlikely(!rq->nr_running)) > idle_balance(cpu, rq); > _______________________________________________ linaro-dev mailing list linaro-dev@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-dev