From: Dietmar Eggemann <dietmar.eggemann@arm.com>
To: Mike Galbraith <umgwanakikbuti@gmail.com>,
Peter Zijlstra <peterz@infradead.org>
Cc: Yuyang Du <yuyang.du@intel.com>, LKML <linux-kernel@vger.kernel.org>
Subject: Re: [rfc patch] sched/fair: Use instantaneous load for fork/exec balancing
Date: Tue, 14 Jun 2016 15:14:52 +0100 [thread overview]
Message-ID: <5760115C.7040306@arm.com> (raw)
In-Reply-To: <1465891111.1694.13.camel@gmail.com>
On 14/06/16 08:58, Mike Galbraith wrote:
> SUSE's regression testing noticed that...
>
> 0905f04eb21f sched/fair: Fix new task's load avg removed from source CPU in wake_up_new_task()
>
> ...introduced a hackbench regression, and indeed it does. I think this
> regression has more to do with randomness than anything else, but in
> general...
>
> While averaging calms down load balancing, helping to keep migrations
> down to a dull roar, it's not completely wonderful when it comes to
> things that live in the here and now, hackbench being one such.
>
> time sh -c 'for i in `seq 1000`; do hackbench -p -P > /dev/null; done'
>
> real 0m55.397s
> user 0m8.320s
> sys 5m40.789s
>
> echo LB_INSTANTANEOUS_LOAD > /sys/kernel/debug/sched_features
>
> real 0m48.049s
> user 0m6.510s
> sys 5m6.291s
>
> Signed-off-by: Mike Galbraith <umgwanakikbuti@gmail.com>
I see similar values on ARM64 (Juno r0: 2xCortex-A57 4xCortex-A53). OK,
1000 invocations of hackbench take a little bit longer but I guess it's
the fork's we're after.
- echo NO_LB_INSTANTANEOUS_LOAD > /sys/kernel/debug/sched_features
time sh -c 'for i in `seq 1000`; do hackbench -p -P > /dev/null; done'
root@juno:~# time sh -c 'for i in `seq 1000`; do hackbench -p -P >
/dev/null; done'
real 10m17.155s
user 2m56.976s
sys 38m0.324s
- echo LB_INSTANTANEOUS_LOAD > /sys/kernel/debug/sched_features
time sh -c 'for i in `seq 1000`; do hackbench -p -P > /dev/null; done'
real 9m49.832s
user 2m42.896s
sys 34m51.452s
- But I get a similar effect in case I initialize se->avg.load_avg w/ 0:
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -680,7 +680,7 @@ void init_entity_runnable_average(struct
sched_entity *se)
* will definitely be update (after enqueue).
*/
sa->period_contrib = 1023;
- sa->load_avg = scale_load_down(se->load.weight);
+ sa->load_avg = scale_load_down(0);
sa->load_sum = sa->load_avg * LOAD_AVG_MAX;
root@juno:~# time sh -c 'for i in `seq 1000`; do hackbench -p -P >
/dev/null; done'
real 9m55.396s
user 2m41.192s
sys 35m6.196s
IMHO, the hackbench performance "boost" w/o 0905f04eb21f is due to the
fact that a new task gets all it's load decayed (making it a small task)
in the __update_load_avg() call in remove_entity_load_avg() because its
se->avg.last_update_time value is 0 which creates a huge time difference
comparing it to cfs_rq->avg.last_update_time. The patch 0905f04eb21f
avoids this and thus the task stays big se->avg.load_avg = 1024.
It can't be a difference in the value of cfs_rq->removed_load_avg
because w/o the patch 0905f04eb21f, we atomic_long_add 0 and with the
patch we bail before the atomic_long_add().
[...]
next prev parent reply other threads:[~2016-06-14 14:15 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-06-14 7:58 [rfc patch] sched/fair: Use instantaneous load for fork/exec balancing Mike Galbraith
2016-06-14 14:14 ` Dietmar Eggemann [this message]
2016-06-14 16:40 ` Mike Galbraith
2016-06-15 15:32 ` Dietmar Eggemann
2016-06-15 16:03 ` Mike Galbraith
2016-06-15 19:03 ` Dietmar Eggemann
2016-06-16 3:33 ` Mike Galbraith
2016-06-16 9:01 ` Dietmar Eggemann
2016-07-04 15:04 ` Matt Fleming
2016-07-04 17:43 ` Mike Galbraith
2016-07-06 11:45 ` Matt Fleming
2016-07-06 12:21 ` Mike Galbraith
2016-07-11 8:58 ` Dietmar Eggemann
2016-07-12 11:14 ` Matt Fleming
2016-06-14 22:42 ` Yuyang Du
2016-06-15 7:01 ` Mike Galbraith
2016-06-16 11:46 ` [patch] sched/fair: Use instantaneous load in wakeup paths Mike Galbraith
2016-06-16 12:04 ` Mike Galbraith
2016-06-16 12:41 ` Mike Galbraith
2016-06-17 6:21 ` Mike Galbraith
2016-06-17 10:55 ` Dietmar Eggemann
2016-06-17 13:57 ` Mike Galbraith
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=5760115C.7040306@arm.com \
--to=dietmar.eggemann@arm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=peterz@infradead.org \
--cc=umgwanakikbuti@gmail.com \
--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.