From: Thara Gopinath <thara.gopinath@linaro.org>
To: Amit Kucheria <amit.kucheria@verdurent.com>
Cc: Ingo Molnar <mingo@redhat.com>,
Peter Zijlstra <peterz@infradead.org>,
ionela.voinescu@arm.com,
Vincent Guittot <vincent.guittot@linaro.org>,
Dietmar Eggemann <dietmar.eggemann@arm.com>,
Zhang Rui <rui.zhang@intel.com>,
qperret@google.com, Daniel Lezcano <daniel.lezcano@linaro.org>,
Viresh Kumar <viresh.kumar@linaro.org>,
Steven Rostedt <rostedt@goodmis.org>,
Will Deacon <will@kernel.org>,
Catalin Marinas <catalin.marinas@arm.com>,
Sudeep Holla <sudeep.holla@arm.com>,
Juri Lelli <juri.lelli@redhat.com>,
corbet@lwn.net, LKML <linux-kernel@vger.kernel.org>,
Amit Daniel Kachhap <amit.kachhap@gmail.com>,
Javi Merino <javi.merino@kernel.org>
Subject: Re: [Patch v9 1/8] sched/pelt: Add support to track thermal pressure
Date: Thu, 13 Feb 2020 09:11:37 -0500 [thread overview]
Message-ID: <5E455919.5090506@linaro.org> (raw)
In-Reply-To: <CAHLCerM9xi4BqmGhfzsq-BQ+gEhP3n70T=RvBrpriXiXChLebQ@mail.gmail.com>
On 02/13/2020 07:29 AM, Amit Kucheria wrote:
> On Wed, Jan 29, 2020 at 4:06 AM Thara Gopinath
> <thara.gopinath@linaro.org> wrote:
>>
>> Extrapolating on the existing framework to track rt/dl utilization using
>> pelt signals, add a similar mechanism to track thermal pressure. The
>> difference here from rt/dl utilization tracking is that, instead of
>> tracking time spent by a cpu running a rt/dl task through util_avg, the
>> average thermal pressure is tracked through load_avg. This is because
>> thermal pressure signal is weighted "delta" capacity and is not
>> binary(util_avg is binary). "delta capacity" here means delta between the
>> actual capacity of a cpu and the decreased capacity a cpu due to a thermal
>> event.
>>
>> In order to track average thermal pressure, a new sched_avg variable
>> avg_thermal is introduced. Function update_thermal_load_avg can be called
>> to do the periodic bookkeeping (accumulate, decay and average) of the
>> thermal pressure.
>>
>> Signed-off-by: Thara Gopinath <thara.gopinath@linaro.org>
>> Reviewed-by: Vincent Guittot <vincent.guittot@linaro.org>
>> ---
>>
>> v6->v7:
>> - Added CONFIG_HAVE_SCHED_THERMAL_PRESSURE to stub out
>> update_thermal_load_avg in unsupported architectures as per
>> review comments from Peter, Dietmar and Quentin.
>> - Updated comment for update_thermal_load_avg as per review
>> comments from Peter and Dietmar.
>> v7->v8:
>> - Fixed typo in defining update_thermal_load_avg which was
>> causing build errors (reported by kbuild test report)
>> v8->v9:
>> - Defined thermal_load_avg to read rq->avg_thermal.load_avg and
>> avoid cacheline miss in unsupported cases as per Peter's
>> suggestion.
>>
>> include/trace/events/sched.h | 4 ++++
>> init/Kconfig | 4 ++++
>> kernel/sched/pelt.c | 31 +++++++++++++++++++++++++++++++
>> kernel/sched/pelt.h | 31 +++++++++++++++++++++++++++++++
>> kernel/sched/sched.h | 3 +++
>> 5 files changed, 73 insertions(+)
>>
>> diff --git a/include/trace/events/sched.h b/include/trace/events/sched.h
>> index 420e80e..a8fb667 100644
>> --- a/include/trace/events/sched.h
>> +++ b/include/trace/events/sched.h
>> @@ -613,6 +613,10 @@ DECLARE_TRACE(pelt_dl_tp,
>> TP_PROTO(struct rq *rq),
>> TP_ARGS(rq));
>>
>> +DECLARE_TRACE(pelt_thermal_tp,
>> + TP_PROTO(struct rq *rq),
>> + TP_ARGS(rq));
>> +
>> DECLARE_TRACE(pelt_irq_tp,
>> TP_PROTO(struct rq *rq),
>> TP_ARGS(rq));
>> diff --git a/init/Kconfig b/init/Kconfig
>> index bd9f1fd..055c3bf 100644
>> --- a/init/Kconfig
>> +++ b/init/Kconfig
>> @@ -463,6 +463,10 @@ config HAVE_SCHED_AVG_IRQ
>> depends on IRQ_TIME_ACCOUNTING || PARAVIRT_TIME_ACCOUNTING
>> depends on SMP
>>
>> +config HAVE_SCHED_THERMAL_PRESSURE
>> + bool "Enable periodic averaging of thermal pressure"
>> + depends on SMP
>> +
>> config BSD_PROCESS_ACCT
>> bool "BSD Process Accounting"
>> depends on MULTIUSER
>> diff --git a/kernel/sched/pelt.c b/kernel/sched/pelt.c
>> index bd006b7..5d1fbf0 100644
>> --- a/kernel/sched/pelt.c
>> +++ b/kernel/sched/pelt.c
>> @@ -367,6 +367,37 @@ int update_dl_rq_load_avg(u64 now, struct rq *rq, int running)
>> return 0;
>> }
>>
>> +#ifdef CONFIG_HAVE_SCHED_THERMAL_PRESSURE
>> +/*
>> + * thermal:
>> + *
>> + * load_sum = \Sum se->avg.load_sum but se->avg.load_sum is not tracked
>> + *
>> + * util_avg and runnable_load_avg are not supported and meaningless.
>> + *
>> + * Unlike rt/dl utilization tracking that track time spent by a cpu
>> + * running a rt/dl task through util_avg, the average thermal pressure is
>> + * tracked through load_avg. This is because thermal pressure signal is
>> + * weighted "delta" capacity and is not binary(util_avg is binary). "delta
>
> May I suggest a slight rewording here and in the commit description,
>
> This is because the thermal pressure signal is weighted "delta"
> capacity unlike util_avg which is binary.
Sure! Will fix it.
>
> It would also help, if you expanded on what you mean by binary in the
> commit description and how the delta capacity is weighted.
I don't understand this. Binary means 0 or 1. delta capacity is time
weighted, i will update this.
>
>> + * capacity" here means delta between the actual capacity of a cpu and the
>> + * decreased capacity a cpu due to a thermal event.
>
> Use consistent wording throughout the series - either capped or
> decreased capacity.
>
>> + */
>
> This could be shortened to:
>
> Delta capacity of cpu = Actual capacity - Capped capacity due to thermal event
Will fix this.
>
>> +int update_thermal_load_avg(u64 now, struct rq *rq, u64 capacity)
>> +{
>> + if (___update_load_sum(now, &rq->avg_thermal,
>> + capacity,
>> + capacity,
>> + capacity)) {
>> + ___update_load_avg(&rq->avg_thermal, 1, 1);
>> + trace_pelt_thermal_tp(rq);
>> + return 1;
>> + }
>> +
>> + return 0;
>> +}
>> +#endif
>> +
>> #ifdef CONFIG_HAVE_SCHED_AVG_IRQ
>> /*
>> * irq:
>> diff --git a/kernel/sched/pelt.h b/kernel/sched/pelt.h
>> index afff644..916979a 100644
>> --- a/kernel/sched/pelt.h
>> +++ b/kernel/sched/pelt.h
>> @@ -7,6 +7,26 @@ int __update_load_avg_cfs_rq(u64 now, struct cfs_rq *cfs_rq);
>> int update_rt_rq_load_avg(u64 now, struct rq *rq, int running);
>> int update_dl_rq_load_avg(u64 now, struct rq *rq, int running);
>>
>> +#ifdef CONFIG_HAVE_SCHED_THERMAL_PRESSURE
>> +int update_thermal_load_avg(u64 now, struct rq *rq, u64 capacity);
>> +
>> +static inline u64 thermal_load_avg(struct rq *rq)
>> +{
>> + return READ_ONCE(rq->avg_thermal.load_avg);
>> +}
>> +#else
>> +static inline int
>> +update_thermal_load_avg(u64 now, struct rq *rq, u64 capacity)
>> +{
>> + return 0;
>> +}
>> +
>> +static inline u64 thermal_load_avg(struct rq *rq)
>> +{
>> + return 0;
>> +}
>> +#endif
>> +
>> #ifdef CONFIG_HAVE_SCHED_AVG_IRQ
>> int update_irq_load_avg(struct rq *rq, u64 running);
>> #else
>> @@ -159,6 +179,17 @@ update_dl_rq_load_avg(u64 now, struct rq *rq, int running)
>> }
>>
>> static inline int
>> +update_thermal_load_avg(u64 now, struct rq *rq, u64 capacity)
>> +{
>> + return 0;
>> +}
>> +
>> +static inline u64 thermal_load_avg(struct rq *rq)
>> +{
>> + return 0;
>> +}
>> +
>> +static inline int
>> update_irq_load_avg(struct rq *rq, u64 running)
>> {
>> return 0;
>> diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
>> index 1a88dc8..1f256cb 100644
>> --- a/kernel/sched/sched.h
>> +++ b/kernel/sched/sched.h
>> @@ -944,6 +944,9 @@ struct rq {
>> #ifdef CONFIG_HAVE_SCHED_AVG_IRQ
>> struct sched_avg avg_irq;
>> #endif
>> +#ifdef CONFIG_HAVE_SCHED_THERMAL_PRESSURE
>> + struct sched_avg avg_thermal;
>> +#endif
>> u64 idle_stamp;
>> u64 avg_idle;
>>
>> --
>> 2.1.4
>>
--
Warm Regards
Thara
next prev parent reply other threads:[~2020-02-13 14:11 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-01-28 22:35 [Patch v9 0/8] Introduce Thermal Pressure Thara Gopinath
2020-01-28 22:36 ` [Patch v9 1/8] sched/pelt: Add support to track thermal pressure Thara Gopinath
2020-02-13 12:29 ` Amit Kucheria
2020-02-13 14:11 ` Thara Gopinath [this message]
2020-02-13 14:41 ` Amit Kucheria
2020-01-28 22:36 ` [Patch v9 2/8] sched/topology: Add hook to read per cpu " Thara Gopinath
2020-01-28 22:36 ` [Patch v9 3/8] arm,arm64,drivers:Add infrastructure to store and update instantaneous " Thara Gopinath
2020-02-13 12:25 ` Amit Kucheria
2020-02-13 14:05 ` Thara Gopinath
2020-02-13 14:38 ` Amit Kucheria
2020-02-14 15:01 ` Thara Gopinath
2020-01-28 22:36 ` [Patch v9 4/8] sched/fair: Enable periodic update of average " Thara Gopinath
2020-01-28 22:36 ` [Patch v9 5/8] sched/fair: update cpu_capacity to reflect " Thara Gopinath
2020-02-13 12:47 ` Amit Kucheria
2020-02-13 14:12 ` Thara Gopinath
2020-02-13 13:39 ` Amit Kucheria
2020-02-14 14:52 ` Thara Gopinath
2020-01-28 22:36 ` [Patch v9 6/8] thermal/cpu-cooling: Update thermal pressure in case of a maximum frequency capping Thara Gopinath
2020-01-28 22:36 ` [Patch v9 7/8] sched/fair: Enable tuning of decay period Thara Gopinath
2020-01-28 23:56 ` Randy Dunlap
2020-02-03 12:07 ` Thara Gopinath
2020-02-03 15:55 ` Peter Zijlstra
2020-02-04 8:39 ` Dietmar Eggemann
2020-02-07 22:42 ` Thara Gopinath
2020-02-10 11:59 ` Dietmar Eggemann
2020-02-13 13:54 ` Thara Gopinath
2020-02-14 10:26 ` Dietmar Eggemann
2020-02-18 14:57 ` Thara Gopinath
2020-02-19 9:14 ` Dietmar Eggemann
2020-01-28 22:36 ` [Patch v9 8/8] arm64: Enable averaging of thermal pressure for arm64 based SoCs Thara Gopinath
2020-02-03 8:59 ` Dietmar Eggemann
2020-02-10 12:07 ` [Patch v9 0/8] Introduce Thermal Pressure Dietmar Eggemann
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=5E455919.5090506@linaro.org \
--to=thara.gopinath@linaro.org \
--cc=amit.kachhap@gmail.com \
--cc=amit.kucheria@verdurent.com \
--cc=catalin.marinas@arm.com \
--cc=corbet@lwn.net \
--cc=daniel.lezcano@linaro.org \
--cc=dietmar.eggemann@arm.com \
--cc=ionela.voinescu@arm.com \
--cc=javi.merino@kernel.org \
--cc=juri.lelli@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=qperret@google.com \
--cc=rostedt@goodmis.org \
--cc=rui.zhang@intel.com \
--cc=sudeep.holla@arm.com \
--cc=vincent.guittot@linaro.org \
--cc=viresh.kumar@linaro.org \
--cc=will@kernel.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.