From: Peter Zijlstra <peterz@infradead.org>
To: Matt Fleming <matt@codeblueprint.co.uk>
Cc: Ingo Molnar <mingo@kernel.org>,
linux-kernel@vger.kernel.org,
Mike Galbraith <umgwanakikbuti@gmail.com>,
Yuyang Du <yuyang.du@intel.com>,
Vincent Guittot <vincent.guittot@linaro.org>,
Dietmar Eggemann <dietmar.eggemann@arm.com>
Subject: Re: [PATCH] sched/fair: Do not decay new task load on first enqueue
Date: Wed, 28 Sep 2016 12:14:22 +0200 [thread overview]
Message-ID: <20160928101422.GR5016@twins.programming.kicks-ass.net> (raw)
In-Reply-To: <20160923115808.2330-1-matt@codeblueprint.co.uk>
On Fri, Sep 23, 2016 at 12:58:08PM +0100, Matt Fleming wrote:
> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
> index 8fb4d1942c14..4a2d3ff772f8 100644
> --- a/kernel/sched/fair.c
> +++ b/kernel/sched/fair.c
> @@ -3142,7 +3142,7 @@ enqueue_entity_load_avg(struct cfs_rq *cfs_rq, struct sched_entity *se)
> int migrated, decayed;
>
> migrated = !sa->last_update_time;
> - if (!migrated) {
> + if (!migrated && se->sum_exec_runtime) {
> __update_load_avg(now, cpu_of(rq_of(cfs_rq)), sa,
> se->on_rq * scale_load_down(se->load.weight),
> cfs_rq->curr == se, NULL);
Hrmm,.. so I see the problem, but I think we're working around it.
So the problem is that time moves between wake_up_new_task() doing
post_init_entity_util_avg(), which attaches us to the cfs_rq, and
activate_task() which enqueues us.
Part of the problem is that we do not in fact seem to do
update_rq_clock() before post_init_entity_util_avg(), which makes the
delta larger than it should be.
The other problem is that activate_task()->enqueue_task() does do
update_rq_clock() (again, after fixing), creating the delta.
Which suggests we do something like the below (not compile tested or
anything, also I ran out of tea again).
While staring at this, I don't think we can still hit
vruntime_normalized() with a new task, so I _think_ we can remove that
!se->sum_exec_runtime clause there (and rejoice), no?
---
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 7e7463aa399a..cc59bd4ab809 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -754,9 +754,16 @@ static void set_load_weight(struct task_struct *p)
static inline void enqueue_task(struct rq *rq, struct task_struct *p, int flags)
{
- update_rq_clock(rq);
+ /*
+ * For ENQUEUE_RESTORE, DEQUEUE_SAVE will have updated the rq-clock,
+ * for ENQUEUE_NEW wake_up_new_task() will have.
+ */
+ if (!(flags & (ENQUEUE_RESTORE | ENQUEUE_NEW)))
+ update_rq_clock(rq);
+
if (!(flags & ENQUEUE_RESTORE))
sched_info_queued(rq, p);
+
p->sched_class->enqueue_task(rq, p, flags);
}
@@ -2577,9 +2584,11 @@ void wake_up_new_task(struct task_struct *p)
__set_task_cpu(p, select_task_rq(p, task_cpu(p), SD_BALANCE_FORK, 0));
#endif
rq = __task_rq_lock(p, &rf);
+
+ update_rq_clock(rq);
post_init_entity_util_avg(&p->se);
+ activate_task(rq, p, ENQUEUE_NEW);
- activate_task(rq, p, 0);
p->on_rq = TASK_ON_RQ_QUEUED;
trace_sched_wakeup_new(p);
check_preempt_curr(rq, p, WF_FORK);
diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
index 7c7e5745038b..3982d7dc9bff 100644
--- a/kernel/sched/sched.h
+++ b/kernel/sched/sched.h
@@ -1193,6 +1193,7 @@ extern const u32 sched_prio_to_wmult[40];
#else
#define ENQUEUE_MIGRATED 0x00
#endif
+#define ENQUEUE_NEW 0x40
#define RETRY_TASK ((void *)-1UL)
next prev parent reply other threads:[~2016-09-28 10:14 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-23 11:58 [PATCH] sched/fair: Do not decay new task load on first enqueue Matt Fleming
2016-09-23 14:30 ` Vincent Guittot
2016-09-27 13:48 ` Dietmar Eggemann
2016-09-27 19:24 ` Matt Fleming
2016-09-27 19:21 ` Matt Fleming
2016-09-28 10:14 ` Peter Zijlstra [this message]
2016-09-28 11:06 ` Dietmar Eggemann
2016-09-28 11:19 ` Peter Zijlstra
2016-09-28 11:31 ` Dietmar Eggemann
2016-09-28 11:46 ` Vincent Guittot
2016-09-28 12:00 ` Vincent Guittot
2016-10-04 21:25 ` Matt Fleming
2016-10-04 20:16 ` Matt Fleming
2016-09-28 12:27 ` Vincent Guittot
2016-09-28 13:13 ` Vincent Guittot
2016-09-29 16:15 ` Dietmar Eggemann
2016-10-03 13:05 ` Vincent Guittot
2016-09-28 17:59 ` Dietmar Eggemann
2016-09-28 19:37 ` Matt Fleming
2016-09-30 20:30 ` Matt Fleming
2016-10-09 3:39 ` Wanpeng Li
2016-10-10 10:01 ` Matt Fleming
2016-10-10 10:09 ` Wanpeng Li
2016-10-11 10:27 ` Matt Fleming
2016-10-10 12:29 ` Vincent Guittot
2016-10-10 13:54 ` Dietmar Eggemann
2016-10-10 18:29 ` Vincent Guittot
2016-10-11 9:44 ` Dietmar Eggemann
2016-10-11 10:39 ` Matt Fleming
2016-10-18 10:11 ` Matt Fleming
2016-10-10 17:34 ` Vincent Guittot
2016-10-11 10:24 ` Matt Fleming
2016-10-11 13:14 ` Vincent Guittot
2016-10-11 18:57 ` Matt Fleming
2016-10-12 7:41 ` Vincent Guittot
2016-10-18 11:09 ` Peter Zijlstra
2016-10-18 15:19 ` Vincent Guittot
2016-10-18 10:29 ` Matt Fleming
2016-10-18 11:10 ` Peter Zijlstra
2016-10-18 11:29 ` Matt Fleming
2016-10-18 12:15 ` Peter Zijlstra
2016-10-19 6:38 ` Vincent Guittot
2016-10-19 9:53 ` Peter Zijlstra
2016-11-09 16:53 ` Vincent Guittot
2016-10-04 20:11 ` Matt Fleming
2016-10-09 5:57 ` [sched/fair] f54c5d4e28: hackbench.throughput 10.6% improvement kernel test robot
2016-10-09 5:57 ` [lkp] " kernel test robot
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=20160928101422.GR5016@twins.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=dietmar.eggemann@arm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=matt@codeblueprint.co.uk \
--cc=mingo@kernel.org \
--cc=umgwanakikbuti@gmail.com \
--cc=vincent.guittot@linaro.org \
--cc=yuyang.du@intel.com \
/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.