From: Valentin Schneider <valentin.schneider@arm.com>
To: Vincent Guittot <vincent.guittot@linaro.org>
Cc: linux-kernel@vger.kernel.org,
Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@kernel.org>,
Dietmar Eggemann <dietmar.eggemann@arm.com>,
Morten Rasmussen <morten.rasmussen@arm.com>,
Qais Yousef <qais.yousef@arm.com>,
Quentin Perret <qperret@google.com>,
Pavan Kondeti <pkondeti@codeaurora.org>,
Rik van Riel <riel@surriel.com>,
Lingutla Chandrasekhar <clingutla@codeaurora.org>
Subject: Re: [PATCH 2/2] sched/fair: Relax task_hot() for misfit tasks
Date: Mon, 19 Apr 2021 18:13:21 +0100 [thread overview]
Message-ID: <87blaakxji.mognet@arm.com> (raw)
In-Reply-To: <20210416135113.GA16445@vingu-book>
On 16/04/21 15:51, Vincent Guittot wrote:
> Le jeudi 15 avril 2021 � 18:58:46 (+0100), Valentin Schneider a �crit :
>> +
>> +/*
>> + * What does migrating this task do to our capacity-aware scheduling criterion?
>> + *
>> + * Returns 1, if the task needs more capacity than the dst CPU can provide.
>> + * Returns 0, if the task needs the extra capacity provided by the dst CPU
>> + * Returns -1, if the task isn't impacted by the migration wrt capacity.
>> + */
>> +static int migrate_degrades_capacity(struct task_struct *p, struct lb_env *env)
>> +{
>> + if (!(env->sd->flags & SD_ASYM_CPUCAPACITY))
>> + return -1;
>> +
>> + if (!task_fits_capacity(p, capacity_of(env->src_cpu))) {
>> + if (cpu_capacity_greater(env->dst_cpu, env->src_cpu))
>> + return 0;
>> + else if (cpu_capacity_greater(env->src_cpu, env->dst_cpu))
>> + return 1;
>> + else
>> + return -1;
>> + }
>
> Being there means that task fits src_cpu capacity so why testing p against dst_cpu ?
>
Because if p fits on src_cpu, we don't want to move it to a dst_cpu on
which it *doesn't* fit.
>> +
>> + return task_fits_capacity(p, capacity_of(env->dst_cpu)) ? -1 : 1;
>> +}
>
> I prefer the below which easier to read because the same var is use everywhere and you can remove cpu_capacity_greater.
>
> static int migrate_degrades_capacity(struct task_struct *p, struct lb_env *env)
> {
> unsigned long src_capacity, dst_capacity;
>
> if (!(env->sd->flags & SD_ASYM_CPUCAPACITY))
> return -1;
>
> src_capacity = capacity_of(env->src_cpu);
> dst_capacity = capacity_of(env->dst_cpu);
>
> if (!task_fits_capacity(p, src_capacity)) {
> if (capacity_greater(dst_capacity, src_capacity))
> return 0;
> else if (capacity_greater(src_capacity, dst_capacity))
> return 1;
> else
> return -1;
> }
>
> return task_fits_capacity(p, dst_capacity) ? -1 : 1;
> }
>
I'll take it, thanks!
>
>> +
>> #ifdef CONFIG_NUMA_BALANCING
>> /*
>> * Returns 1, if task migration degrades locality
>> @@ -7672,6 +7698,15 @@ int can_migrate_task(struct task_struct *p, struct lb_env *env)
>> if (tsk_cache_hot == -1)
>> tsk_cache_hot = task_hot(p, env);
>>
>> + /*
>> + * On a (sane) asymmetric CPU capacity system, the increase in compute
>> + * capacity should offset any potential performance hit caused by a
>> + * migration.
>> + */
>> + if ((env->dst_grp_type == group_has_spare) &&
>
> Shouldn't it be env->src_grp_type == group_misfit_task to only care of misfit task case as
> stated in $subject
>
Previously this was env->idle != CPU_NOT_IDLE, but I figured dst_grp_type
could give us a better picture. Staring at this some more, this isn't so
true when the group size goes up - there's no guarantees the dst_cpu is the
one that has spare cycles, and the other CPUs might not be able to grant
the capacity uplift dst_cpu can.
As for not using src_grp_type == group_misfit_task, this is pretty much the
same as [1]. CPU-bound (misfit) task + some other task on the same rq
implies group_overloaded classification when balancing at MC level (no SMT,
so one group per CPU).
[1]: http://lore.kernel.org/r/jhjblcuv2mo.mognet@arm.com
next prev parent reply other threads:[~2021-04-19 17:13 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-15 17:58 [PATCH 0/2] sched/fair: (The return of) misfit task load-balance tweaks Valentin Schneider
2021-04-15 17:58 ` [PATCH 1/2] sched/fair: Filter out locally-unsolvable misfit imbalances Valentin Schneider
2021-04-15 18:47 ` Rik van Riel
2021-04-16 13:29 ` Vincent Guittot
2021-04-19 17:13 ` Valentin Schneider
2021-04-22 9:48 ` Dietmar Eggemann
2021-04-22 19:19 ` Valentin Schneider
2021-04-15 17:58 ` [PATCH 2/2] sched/fair: Relax task_hot() for misfit tasks Valentin Schneider
2021-04-15 20:39 ` Rik van Riel
2021-04-16 9:43 ` Valentin Schneider
2021-04-19 12:59 ` Phil Auld
2021-04-19 17:17 ` Valentin Schneider
2021-04-19 20:23 ` Phil Auld
2021-04-16 13:51 ` Vincent Guittot
2021-04-19 17:13 ` Valentin Schneider [this message]
2021-04-20 14:33 ` Vincent Guittot
2021-04-21 10:52 ` Valentin Schneider
2021-04-22 17:29 ` Dietmar Eggemann
2021-04-22 19:19 ` Valentin Schneider
2021-04-30 6:58 ` Vincent Guittot
2021-05-07 13:46 ` Valentin Schneider
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=87blaakxji.mognet@arm.com \
--to=valentin.schneider@arm.com \
--cc=clingutla@codeaurora.org \
--cc=dietmar.eggemann@arm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=morten.rasmussen@arm.com \
--cc=peterz@infradead.org \
--cc=pkondeti@codeaurora.org \
--cc=qais.yousef@arm.com \
--cc=qperret@google.com \
--cc=riel@surriel.com \
--cc=vincent.guittot@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.