From: Ionela Voinescu <ionela.voinescu@arm.com>
To: Viresh Kumar <viresh.kumar@linaro.org>
Cc: "liwei (JK)" <liwei728@huawei.com>,
Beata Michalska <beata.michalska@arm.com>,
Vanshidhar Konda <vanshikonda@os.amperecomputing.com>,
rafael@kernel.org, al.stone@linaro.org,
ashwin.chaugule@linaro.org, linux-pm@vger.kernel.org,
linux-kernel@vger.kernel.org, liwei391@huawei.com,
liaoyu15@huawei.com
Subject: Re: [PATCH] cpufreq/cppc: changing highest_perf to nominal_perf in cppc_cpufreq_cpu_init()
Date: Tue, 11 Jun 2024 10:39:18 +0100 [thread overview]
Message-ID: <ZmgbRh+m9MmEaopK@arm.com> (raw)
In-Reply-To: <20240606072031.lxr7tykl7sdgjwva@vireshk-i7>
Hey,
On Thursday 06 Jun 2024 at 12:50:31 (+0530), Viresh Kumar wrote:
> On 05-06-24, 15:26, Ionela Voinescu wrote:
> > > > > > cpufreq_start_governor() // governor: performance
> > > > > > new_freq = cpufreq_driver->get() // if new_freq == policy->max
> > > > > > if (policy->cur != new_freq)
> > > > > > cpufreq_out_of_sync(policy, new_freq)
> > > > > > ...
> > > > > > policy->cur = new_freq
> > > > I believe the problem is here ^^^^^^^^^^^^^^^^^^^^^^.
> > > >
> > > > cpufreq_verify_current_freq() should not update policy->cur unless a
> > > > request to change frequency has actually reached the driver. I believe
> > > > policy->cur should always reflect the request, not the actual current
> > > > frequency of the CPU.
>
> There are times when the core doesn't have any prior information about
> the frequency, for example at driver probe time and resume. And so
> needs to set policy->cur by reading it from the hardware.
>
Makes sense! But maybe we should no longer update policy->cur to the
current/hardware frequency once a request comes through from a
governor, and we have a first actually requested value.
> > > > Given that new_freq is the current (hardware) frequency of the CPU,
> > > > obtained via .get(), it can be the nominal frequency, as it is in your
> > > > case, or any frequency, if there is any firmware/hardware capping in
> > > > place.
> > > >
> > > > This causes the issue in your scenario, in which __cpufreq_driver_target()
> > > > filters the request from the governor as it finds it equal to policy->cur,
> > > > and it believes it's already set by hardware.
>
> I am still not sure why mismatch happens at boot time here.
>
> > > > This causes another issue in which scaling_cur_freq, which for some
> > > > systems returns policy->cur, ends up returning the hardware frequency of
> > > > the CPUs, and not the last frequency request, as it should:
> > > >
> > > > "scaling_cur_freq
> > > > Current frequency of all of the CPUs belonging to this policy (in kHz).
> > > >
> > > > In the majority of cases, this is the frequency of the last P-state
> > > > requested by the scaling driver from the hardware using the scaling
> > > > interface provided by it, which may or may not reflect the frequency
> > > > the CPU is actually running at (due to hardware design and other
> > > > limitations)." [1]
>
> There is discussion going on about this in another thread [1] now.
Thanks for the contributions to that topic, by the way.
Kind regards,
Ionela.
>
> > > > Therefore policy->cur gets polluted with the hardware frequency of the
> > > > CPU sampled at that one time, and this affects governor decisions, as
> > > > in your case, and scaling_cur_freq feedback as well. This bad value will
> > > > not change until there's another .target() or cpufreq_out_of_sync()
> > > > call, which will never happen for fixed frequency governors like the
> > > > performance governor.
>
> --
> viresh
>
> [1] https://lore.kernel.org/all/20240603081331.3829278-2-beata.michalska@arm.com/
next prev parent reply other threads:[~2024-06-11 9:39 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-28 9:28 [PATCH] cpufreq/cppc: changing highest_perf to nominal_perf in cppc_cpufreq_cpu_init() liwei
2024-04-29 10:49 ` Viresh Kumar
2024-05-01 17:14 ` Vanshidhar Konda
2024-05-03 14:19 ` Pierre Gondois
2024-05-06 2:21 ` liwei (JK)
2024-05-07 10:25 ` Ionela Voinescu
2024-05-10 3:06 ` liwei (JK)
2024-06-05 14:26 ` Ionela Voinescu
2024-06-06 7:20 ` Viresh Kumar
2024-06-11 9:39 ` Ionela Voinescu [this message]
2024-06-11 9:45 ` Viresh Kumar
2024-06-11 10:29 ` Ionela Voinescu
2024-06-13 8:40 ` Viresh Kumar
2024-06-06 7:16 ` Viresh Kumar
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=ZmgbRh+m9MmEaopK@arm.com \
--to=ionela.voinescu@arm.com \
--cc=al.stone@linaro.org \
--cc=ashwin.chaugule@linaro.org \
--cc=beata.michalska@arm.com \
--cc=liaoyu15@huawei.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=liwei391@huawei.com \
--cc=liwei728@huawei.com \
--cc=rafael@kernel.org \
--cc=vanshikonda@os.amperecomputing.com \
--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 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.