Messages in this thread | | | Date | Thu, 14 Feb 2013 21:07:55 +0800 | From | Alex Shi <> | Subject | Re: [patch v4 07/18] sched: set initial load avg of new forked task |
| |
> diff --git a/kernel/sched/core.c b/kernel/sched/core.c > index 1dff78a..9d1c193 100644 > --- a/kernel/sched/core.c > +++ b/kernel/sched/core.c > @@ -1557,8 +1557,8 @@ static void __sched_fork(struct task_struct *p) > * load-balance). > */ > #if defined(CONFIG_SMP) && defined(CONFIG_FAIR_GROUP_SCHED) > - p->se.avg.runnable_avg_period = 0; > - p->se.avg.runnable_avg_sum = 0; > + p->se.avg.runnable_avg_period = 1024; > + p->se.avg.runnable_avg_sum = 1024;
It can't work. avg.decay_count needs to be set to 0 before enqueue_entity_load_avg(), then update_entity_load_avg() can't be called, so, runnable_avg_period/sum are unusable.
Even we has chance to call __update_entity_runnable_avg(), avg.last_runnable_update needs be set before that, usually, it needs to be set as 'now', that cause __update_entity_runnable_avg() function return 0, then update_entity_load_avg() still can not reach to __update_entity_load_avg_contrib().
If we embed a simple new task load initialization to many functions, that is too hard for future reader.
> #endif > #ifdef CONFIG_SCHEDSTATS > memset(&p->se.statistics, 0, sizeof(p->se.statistics)); > > > >> >> >> -- >> Thanks >> Alex
-- Thanks Alex
| |