From: Qais Yousef <qyousef@layalina.io>
To: Dietmar Eggemann <dietmar.eggemann@arm.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@kernel.org>,
"Rafael J. Wysocki" <rafael@kernel.org>,
Viresh Kumar <viresh.kumar@linaro.org>,
Vincent Guittot <vincent.guittot@linaro.org>,
linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org,
Lukasz Luba <lukasz.luba@arm.com>
Subject: Re: [RFC PATCH 0/7] sched: cpufreq: Remove magic margins
Date: Sat, 16 Sep 2023 20:38:46 +0100 [thread overview]
Message-ID: <20230916193846.ewjie23c4vtf4edn@airbuntu> (raw)
In-Reply-To: <356ec193-5c89-4f7e-5e43-d600dff68cf9@arm.com>
On 09/12/23 19:18, Dietmar Eggemann wrote:
> On 08/09/2023 16:07, Qais Yousef wrote:
> > On 09/08/23 09:40, Dietmar Eggemann wrote:
> >> On 08/09/2023 02:17, Qais Yousef wrote:
> >>> On 09/07/23 15:08, Peter Zijlstra wrote:
> >>>> On Mon, Aug 28, 2023 at 12:31:56AM +0100, Qais Yousef wrote:
>
> [...]
>
> >>> And what was a high end A78 is a mid core today. So if you look at today's
> >>> mobile world topology we really have a tiy+big+huge combination of cores. The
> >>> bigs are called mids, but they're very capable. Fits capacity forces migration
> >>> to the 'huge' cores too soon with that 80% margin. While the 80% might be too
> >>> small for the tiny ones as some workloads really struggle there if they hang on
> >>> for too long. It doesn't help that these systems ship with 4ms tick. Something
> >>> more to consider changing I guess.
> >>
> >> If this is the problem then you could simply make the margin (headroom)
> >> a function of cpu_capacity_orig?
> >
> > I don't see what you mean. instead of capacity_of() but keep the 80%?
> >
> > Again, I could be delusional and misunderstanding everything, but what I really
> > see fits_capacity() is about is misfit detection. But a task is not really
> > misfit until it actually has a util above the capacity of the CPU. Now due to
> > implementation details there can be a delay between the task crossing this
> > capacity and being able to move it. Which what I believe this headroom is
> > trying to achieve.
> >
> > I think we can better define this by tying this headroom to the worst case
> > scenario it takes to actually move this misfit task to the right CPU. If it can
> > continue to run without being impacted with this delay and crossing the
> > capacity of the CPU it is on, then we should not trigger misfit IMO.
>
>
> Instead of:
>
> fits_capacity(unsigned long util, unsigned long capacity)
>
> return approximate_util_avg(util, TICK_USEC) < capacity;
>
> just make 1280 in:
>
> #define fits_capacity(cap, max) ((cap) * 1280 < (max) * 1024)
>
> dependent on cpu's capacity_orig or the capacity diff to the next higher
> capacity_orig.
>
> Typical example today: {little-medium-big capacity_orig} = {128, 896, 1024}
>
> 896÷128 = 7
>
> 1024/896 = 1.14
>
> to achieve higher margin on little and lower margin on medium.
I am not keen on this personally. I think these numbers are random to me and
why they help (or not help) is not clear to me at least.
I do believe that the only reason why we want to move before a task util
crosses the capacity of the CPU is tied down to the misfit load balance to be
able to move the task. Because until the task crosses the capacity, it is
getting its computational demand per our PELT representation. But since load
balance is not an immediate action (especially on our platforms where it is
4ms, something I hope we can change); we need to preemptively exclude the CPU
as a misfit when we know the task will get 'stuck' on this CPU and not get its
computational demand (as per our representation of course).
I think this removes all guess work and provides a very meaningful decision
making process that I think will scale transparently so we utilize our
resources the best we can.
We can probably optimize the code to avoid the call to approximate_util_avg()
if this is a problem.
Why do you think the ratio of cpu capacities gives more meaningful method to
judge misfit?
Thanks!
--
Qais Yousef
next prev parent reply other threads:[~2023-09-16 19:39 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-27 23:31 [RFC PATCH 0/7] sched: cpufreq: Remove magic margins Qais Yousef
2023-08-27 23:31 ` [RFC PATCH 1/7] sched/pelt: Add a new function to approximate the future util_avg value Qais Yousef
2023-09-06 12:56 ` Dietmar Eggemann
2023-09-06 21:19 ` Qais Yousef
2023-09-07 11:12 ` Dietmar Eggemann
2023-09-10 19:58 ` Qais Yousef
2023-09-13 17:22 ` Dietmar Eggemann
2023-09-16 19:49 ` Qais Yousef
2023-09-16 19:52 ` Qais Yousef
2023-08-27 23:31 ` [RFC PATCH 2/7] sched/pelt: Add a new function to approximate runtime to reach given util Qais Yousef
2023-09-06 12:56 ` Dietmar Eggemann
2023-09-06 20:44 ` Dietmar Eggemann
2023-09-06 21:38 ` Qais Yousef
2023-09-15 9:15 ` Hongyan Xia
2023-09-16 19:56 ` Qais Yousef
2023-08-27 23:31 ` [RFC PATCH 3/7] sched/fair: Remove magic margin in fits_capacity() Qais Yousef
2023-09-06 14:38 ` Dietmar Eggemann
2023-09-06 21:45 ` Qais Yousef
2023-08-27 23:32 ` [RFC PATCH 4/7] sched: cpufreq: Remove magic 1.25 headroom from apply_dvfs_headroom() Qais Yousef
2023-09-07 11:34 ` Peter Zijlstra
2023-09-10 19:23 ` Qais Yousef
2023-08-27 23:32 ` [RFC PATCH 5/7] sched/schedutil: Add a new tunable to dictate response time Qais Yousef
2023-09-06 21:13 ` Dietmar Eggemann
2023-09-06 21:52 ` Qais Yousef
2023-09-07 11:44 ` Peter Zijlstra
2023-09-10 19:25 ` Qais Yousef
2023-08-27 23:32 ` [RFC PATCH 6/7] sched/pelt: Introduce PELT multiplier Qais Yousef
2023-08-27 23:32 ` [RFC PATCH 7/7] cpufreq: Change default transition delay to 2ms Qais Yousef
2023-09-06 9:18 ` [RFC PATCH 0/7] sched: cpufreq: Remove magic margins Lukasz Luba
2023-09-06 21:18 ` Qais Yousef
2023-09-07 7:48 ` Lukasz Luba
2023-09-07 11:53 ` Peter Zijlstra
2023-09-07 13:06 ` Lukasz Luba
2023-09-07 13:29 ` Peter Zijlstra
2023-09-07 13:33 ` Lukasz Luba
2023-09-07 13:38 ` Peter Zijlstra
2023-09-07 13:45 ` Lukasz Luba
2023-09-08 12:51 ` Daniel Bristot de Oliveira
2023-09-12 11:57 ` Lukasz Luba
2023-09-10 18:20 ` Qais Yousef
2023-09-10 18:14 ` Qais Yousef
2023-09-07 13:26 ` Peter Zijlstra
2023-09-07 13:57 ` Lukasz Luba
2023-09-07 14:29 ` Peter Zijlstra
2023-09-07 14:42 ` Lukasz Luba
2023-09-07 20:16 ` Peter Zijlstra
2023-09-12 11:51 ` Lukasz Luba
2023-09-12 14:01 ` Vincent Guittot
2023-09-13 9:53 ` Lukasz Luba
2023-09-12 14:28 ` Peter Zijlstra
2023-09-10 19:06 ` Qais Yousef
2023-09-10 18:46 ` Qais Yousef
2023-09-07 13:08 ` Peter Zijlstra
2023-09-08 0:17 ` Qais Yousef
2023-09-08 7:40 ` Dietmar Eggemann
2023-09-08 14:07 ` Qais Yousef
2023-09-12 17:18 ` Dietmar Eggemann
2023-09-16 19:38 ` Qais Yousef [this message]
2023-09-08 10:25 ` Peter Zijlstra
2023-09-08 13:33 ` Qais Yousef
2023-09-08 13:58 ` Peter Zijlstra
2023-09-08 13:59 ` Peter Zijlstra
2023-09-08 14:11 ` Qais Yousef
2023-09-10 21:17 ` Qais Yousef
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=20230916193846.ewjie23c4vtf4edn@airbuntu \
--to=qyousef@layalina.io \
--cc=dietmar.eggemann@arm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=lukasz.luba@arm.com \
--cc=mingo@kernel.org \
--cc=peterz@infradead.org \
--cc=rafael@kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox