[2/3] sched/fair: trigger asym_packing during idle load balance

Message ID 1545292547-18770-3-git-send-email-vincent.guittot@linaro.org
State Superseded
Headers show
Series
  • sched/fair: some fixes for asym_packing
Related show

Commit Message

Vincent Guittot Dec. 20, 2018, 7:55 a.m.
newly idle load balance is not always triggered when a cpu becomes idle.
This prevent the scheduler to get a chance to migrate task for asym packing.
Enable active migration because of asym packing during idle load balance too.

Signed-off-by: Vincent Guittot <vincent.guittot@linaro.org>

---
 kernel/sched/fair.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

-- 
2.7.4

Comments

Valentin Schneider Dec. 20, 2018, 11:19 a.m. | #1
On 20/12/2018 07:55, Vincent Guittot wrote:
> newly idle load balance is not always triggered when a cpu becomes idle.

> This prevent the scheduler to get a chance to migrate task for asym packing.

> Enable active migration because of asym packing during idle load balance too.

> 

> Signed-off-by: Vincent Guittot <vincent.guittot@linaro.org>

> ---

>  kernel/sched/fair.c | 2 +-

>  1 file changed, 1 insertion(+), 1 deletion(-)

> 

> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c

> index 9b31247..487c73e 100644

> --- a/kernel/sched/fair.c

> +++ b/kernel/sched/fair.c

> @@ -8853,7 +8853,7 @@ static int need_active_balance(struct lb_env *env)

>  {

>  	struct sched_domain *sd = env->sd;

>  

> -	if (env->idle == CPU_NEWLY_IDLE) {

> +	if (env->idle != CPU_NOT_IDLE) {

>  

>  		/*

>  		 * ASYM_PACKING needs to force migrate tasks from busy but

> 


Regarding just extending the condition to include idle balance:

Reviewed-by: Valentin Schneider <valentin.schneider@arm.com>



As in the previous thread, I'll still argue that if you want to *reliably*
exploit newidle balances to do asym packing active balancing, you should
add some logic to raise rq->rd->overload when we notice some asym packing
could be done, so that it can be leveraged by a higher-priority CPU doing
a newidle balance.

Otherwise the few newidle asym-packing active balances you'll get will be
due to somewhat random luck because we happened to set that overload flag
at some point.
Vincent Guittot Dec. 20, 2018, 2:33 p.m. | #2
On Thu, 20 Dec 2018 at 12:19, Valentin Schneider
<valentin.schneider@arm.com> wrote:
>

> On 20/12/2018 07:55, Vincent Guittot wrote:

> > newly idle load balance is not always triggered when a cpu becomes idle.

> > This prevent the scheduler to get a chance to migrate task for asym packing.

> > Enable active migration because of asym packing during idle load balance too.

> >

> > Signed-off-by: Vincent Guittot <vincent.guittot@linaro.org>

> > ---

> >  kernel/sched/fair.c | 2 +-

> >  1 file changed, 1 insertion(+), 1 deletion(-)

> >

> > diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c

> > index 9b31247..487c73e 100644

> > --- a/kernel/sched/fair.c

> > +++ b/kernel/sched/fair.c

> > @@ -8853,7 +8853,7 @@ static int need_active_balance(struct lb_env *env)

> >  {

> >       struct sched_domain *sd = env->sd;

> >

> > -     if (env->idle == CPU_NEWLY_IDLE) {

> > +     if (env->idle != CPU_NOT_IDLE) {

> >

> >               /*

> >                * ASYM_PACKING needs to force migrate tasks from busy but

> >

>

> Regarding just extending the condition to include idle balance:

>

> Reviewed-by: Valentin Schneider <valentin.schneider@arm.com>

>

>

> As in the previous thread, I'll still argue that if you want to *reliably*

> exploit newidle balances to do asym packing active balancing, you should

> add some logic to raise rq->rd->overload when we notice some asym packing

> could be done, so that it can be leveraged by a higher-priority CPU doing

> a newidle balance.


The source cpu with the task is never overloaded.
We need to start the load balance to know that it's worth migrating the task.

>

> Otherwise the few newidle asym-packing active balances you'll get will be

> due to somewhat random luck because we happened to set that overload flag

> at some point.
Valentin Schneider Dec. 20, 2018, 4:12 p.m. | #3
On 20/12/2018 14:33, Vincent Guittot wrote:
[...]
>> As in the previous thread, I'll still argue that if you want to *reliably*

>> exploit newidle balances to do asym packing active balancing, you should

>> add some logic to raise rq->rd->overload when we notice some asym packing

>> could be done, so that it can be leveraged by a higher-priority CPU doing

>> a newidle balance.

> 

> The source cpu with the task is never overloaded.

> We need to start the load balance to know that it's worth migrating the task.

> 


Yep, that's my point exactly:  if you ever want to active balance a task
on a rq with nr_running == 1 when a higher priority CPU goes newidle, you'd
need an asym-packing version of:

  757ffdd705ee ("sched/fair: Set rq->rd->overload when misfit")

It's somewhat orthogonal to this patch, but the reason I'm bringing this up
is that the commit log says

  "newly idle load balance is not always triggered when a cpu becomes idle"

And not having root_domain->overload raised is a reason for that issue.

>>

>> Otherwise the few newidle asym-packing active balances you'll get will be

>> due to somewhat random luck because we happened to set that overload flag

>> at some point.

Patch

diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 9b31247..487c73e 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -8853,7 +8853,7 @@  static int need_active_balance(struct lb_env *env)
 {
 	struct sched_domain *sd = env->sd;
 
-	if (env->idle == CPU_NEWLY_IDLE) {
+	if (env->idle != CPU_NOT_IDLE) {
 
 		/*
 		 * ASYM_PACKING needs to force migrate tasks from busy but