From: Preeti U Murthy <preeti@linux.vnet.ibm.com>
To: Paul Turner <pjt@google.com>
Cc: Alex Shi <alex.shi@intel.com>,
Peter Zijlstra <peterz@infradead.org>,
torvalds@linux-foundation.org, mingo@redhat.com,
tglx@linutronix.de, akpm@linux-foundation.org,
arjan@linux.intel.com, bp@alien8.de, namhyung@kernel.org,
efault@gmx.de, vincent.guittot@linaro.org,
gregkh@linuxfoundation.org, viresh.kumar@linaro.org,
linux-kernel@vger.kernel.org
Subject: Re: [patch v4 07/18] sched: set initial load avg of new forked task
Date: Wed, 20 Feb 2013 09:48:37 +0530 [thread overview]
Message-ID: <51244E9D.6050709@linux.vnet.ibm.com> (raw)
In-Reply-To: <CAPM31RKf6Gint-fPxfuFkXxxbpJfkk=5=5v3W0uxvTnnvOoM-A@mail.gmail.com>
Hi everyone,
On 02/19/2013 05:04 PM, Paul Turner wrote:
> On Fri, Feb 15, 2013 at 2:07 AM, Alex Shi <alex.shi@intel.com> wrote:
>>
>>> 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.
>
> Well we _could_ also use a negative decay_count here and treat it like
> a migration; but the larger problem is the visibility of p->on_rq;
> which is gates whether we account the time as runnable and occurs
> after activate_task() so that's out.
>
>>
>> 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.
>
> This is my concern about making this a special case with the
> introduction ENQUEUE_NEWTASK flag; enqueue jumps through enough hoops
> as it is.
>
> I still don't see why we can't resolve this at init time in
> __sched_fork(); your patch above just moves an explicit initialization
> of load_avg_contrib into the enqueue path. Adding a call to
> __update_task_entity_contrib() to the previous alternate suggestion
> would similarly seem to resolve this?
We could do this(Adding a call to __update_task_entity_contrib()),but the
cfs_rq->runnable_load_avg gets updated only if the task is on the runqueue.
But in the forked task's case the on_rq flag is not yet set.Something like
the below:
---
kernel/sched/fair.c | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 8691b0d..841e156 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -1451,14 +1451,20 @@ static inline void update_entity_load_avg(struct sched_entity *se,
else
now = cfs_rq_clock_task(group_cfs_rq(se));
- if (!__update_entity_runnable_avg(now, &se->avg, se->on_rq))
- return;
-
+ if (!__update_entity_runnable_avg(now, &se->avg, se->on_rq)) {
+ if (!(flags & ENQUEUE_NEWTASK))
+ return;
+ }
contrib_delta = __update_entity_load_avg_contrib(se);
if (!update_cfs_rq)
return;
+ /* But the cfs_rq->runnable_load_avg does not get updated in case of
+ * a forked task,because the se->on_rq = 0,although we update the
+ * task's load_avg_contrib above in
+ * __update_entity_laod_avg_contrib().
+ */
if (se->on_rq)
cfs_rq->runnable_load_avg += contrib_delta;
else
@@ -1538,12 +1544,6 @@ static inline void enqueue_entity_load_avg(struct cfs_rq *cfs_rq,
subtract_blocked_load_contrib(cfs_rq, se->avg.load_avg_contrib);
update_entity_load_avg(se, 0);
}
- /*
- * set the initial load avg of new task same as its load
- * in order to avoid brust fork make few cpu too heavier
- */
- if (flags & ENQUEUE_NEWTASK)
- se->avg.load_avg_contrib = se->load.weight;
cfs_rq->runnable_load_avg += se->avg.load_avg_contrib;
/* we force update consideration on load-balancer moves */
Thanks
Regards
Preeti U Murthy
next prev parent reply other threads:[~2013-02-20 4:19 UTC|newest]
Thread overview: 88+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-24 3:06 [patch v4 0/18] sched: simplified fork, release load avg and power awareness scheduling Alex Shi
2013-01-24 3:06 ` [patch v4 01/18] sched: set SD_PREFER_SIBLING on MC domain to reduce a domain level Alex Shi
2013-02-12 10:11 ` Peter Zijlstra
2013-02-13 13:22 ` Alex Shi
2013-02-15 12:38 ` Peter Zijlstra
2013-02-16 5:16 ` Alex Shi
2013-02-13 14:17 ` Alex Shi
2013-01-24 3:06 ` [patch v4 02/18] sched: select_task_rq_fair clean up Alex Shi
2013-02-12 10:14 ` Peter Zijlstra
2013-02-13 14:44 ` Alex Shi
2013-01-24 3:06 ` [patch v4 03/18] sched: fix find_idlest_group mess logical Alex Shi
2013-02-12 10:16 ` Peter Zijlstra
2013-02-13 15:07 ` Alex Shi
2013-01-24 3:06 ` [patch v4 04/18] sched: don't need go to smaller sched domain Alex Shi
2013-01-24 3:06 ` [patch v4 05/18] sched: quicker balancing on fork/exec/wake Alex Shi
2013-02-12 10:22 ` Peter Zijlstra
2013-02-14 3:13 ` Alex Shi
2013-02-14 8:12 ` Preeti U Murthy
2013-02-14 14:08 ` Alex Shi
2013-02-15 13:00 ` Peter Zijlstra
2013-01-24 3:06 ` [patch v4 06/18] sched: give initial value for runnable avg of sched entities Alex Shi
2013-02-12 10:23 ` Peter Zijlstra
2013-01-24 3:06 ` [patch v4 07/18] sched: set initial load avg of new forked task Alex Shi
2013-02-12 10:26 ` Peter Zijlstra
2013-02-13 15:14 ` Alex Shi
2013-02-13 15:41 ` Paul Turner
2013-02-14 13:07 ` Alex Shi
2013-02-19 11:34 ` Paul Turner
2013-02-20 4:18 ` Preeti U Murthy [this message]
2013-02-20 5:13 ` Alex Shi
2013-01-24 3:06 ` [patch v4 08/18] Revert "sched: Introduce temporary FAIR_GROUP_SCHED dependency for load-tracking" Alex Shi
2013-02-12 10:27 ` Peter Zijlstra
2013-02-13 15:23 ` Alex Shi
2013-02-13 15:45 ` Paul Turner
2013-02-14 3:07 ` Preeti U Murthy
2013-01-24 3:06 ` [patch v4 09/18] sched: add sched_policies in kernel Alex Shi
2013-02-12 10:36 ` Peter Zijlstra
2013-02-13 15:41 ` Alex Shi
2013-01-24 3:06 ` [patch v4 10/18] sched: add sysfs interface for sched_policy selection Alex Shi
2013-01-24 3:06 ` [patch v4 11/18] sched: log the cpu utilization at rq Alex Shi
2013-02-12 10:39 ` Peter Zijlstra
2013-02-14 3:10 ` Alex Shi
2013-01-24 3:06 ` [patch v4 12/18] sched: add power aware scheduling in fork/exec/wake Alex Shi
2013-01-24 3:06 ` [patch v4 13/18] sched: packing small tasks in wake/exec balancing Alex Shi
2013-01-24 3:06 ` [patch v4 14/18] sched: add power/performance balance allowed flag Alex Shi
2013-01-24 3:06 ` [patch v4 15/18] sched: pull all tasks from source group Alex Shi
2013-01-24 3:06 ` [patch v4 16/18] sched: don't care if the local group has capacity Alex Shi
2013-01-24 3:06 ` [patch v4 17/18] sched: power aware load balance, Alex Shi
2013-01-24 3:07 ` [patch v4 18/18] sched: lazy power balance Alex Shi
2013-01-24 9:44 ` [patch v4 0/18] sched: simplified fork, release load avg and power awareness scheduling Borislav Petkov
2013-01-24 15:07 ` Alex Shi
2013-01-27 2:41 ` Alex Shi
2013-01-27 4:36 ` Mike Galbraith
2013-01-27 10:35 ` Borislav Petkov
2013-01-27 13:25 ` Alex Shi
2013-01-27 15:51 ` Mike Galbraith
2013-01-28 5:17 ` Mike Galbraith
2013-01-28 5:51 ` Alex Shi
2013-01-28 6:15 ` Mike Galbraith
2013-01-28 6:42 ` Mike Galbraith
2013-01-28 7:20 ` Mike Galbraith
2013-01-29 1:17 ` Alex Shi
2013-01-28 9:55 ` Borislav Petkov
2013-01-28 10:44 ` Mike Galbraith
2013-01-28 11:29 ` Borislav Petkov
2013-01-28 11:32 ` Mike Galbraith
2013-01-28 11:40 ` Mike Galbraith
2013-01-28 15:22 ` Borislav Petkov
2013-01-28 15:55 ` Mike Galbraith
2013-01-29 1:38 ` Alex Shi
2013-01-29 1:32 ` Alex Shi
2013-01-29 1:36 ` Alex Shi
2013-01-28 15:47 ` Mike Galbraith
2013-01-29 1:45 ` Alex Shi
2013-01-29 4:03 ` Mike Galbraith
2013-01-29 2:27 ` Alex Shi
2013-01-27 10:40 ` Borislav Petkov
2013-01-27 14:03 ` Alex Shi
2013-01-28 5:19 ` Alex Shi
2013-01-28 6:49 ` Mike Galbraith
2013-01-28 7:17 ` Alex Shi
2013-01-28 7:33 ` Mike Galbraith
2013-01-29 6:02 ` Alex Shi
2013-01-28 1:28 ` Alex Shi
2013-02-04 1:35 ` Alex Shi
2013-02-04 11:09 ` Ingo Molnar
2013-02-05 2:26 ` Alex Shi
2013-02-06 5:08 ` Alex Shi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=51244E9D.6050709@linux.vnet.ibm.com \
--to=preeti@linux.vnet.ibm.com \
--cc=akpm@linux-foundation.org \
--cc=alex.shi@intel.com \
--cc=arjan@linux.intel.com \
--cc=bp@alien8.de \
--cc=efault@gmx.de \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
--cc=pjt@google.com \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
--cc=vincent.guittot@linaro.org \
--cc=viresh.kumar@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.