All of lore.kernel.org
 help / color / mirror / Atom feed
From: Thara Gopinath <thara.gopinath@linaro.org>
To: Peter Zijlstra <peterz@infradead.org>
Cc: mingo@redhat.com, ionela.voinescu@arm.com,
	vincent.guittot@linaro.org, dietmar.eggemann@arm.com,
	rui.zhang@intel.com, qperret@google.com,
	daniel.lezcano@linaro.org, viresh.kumar@linaro.org,
	linux-kernel@vger.kernel.org, amit.kachhap@gmail.com,
	javi.merino@kernel.org, amit.kucheria@verdurent.com
Subject: Re: [Patch v8 4/7] sched/fair: Enable periodic update of average thermal pressure
Date: Fri, 17 Jan 2020 15:20:13 -0500	[thread overview]
Message-ID: <5E2216FD.5040903@linaro.org> (raw)
In-Reply-To: <20200116151502.GQ2827@hirez.programming.kicks-ass.net>

On 01/16/2020 10:15 AM, Peter Zijlstra wrote:
> On Tue, Jan 14, 2020 at 02:57:36PM -0500, Thara Gopinath wrote:
>> Introduce support in CFS periodic tick and other bookkeeping apis
>> to trigger the process of computing average thermal pressure for a
>> cpu. Also consider avg_thermal.load_avg in others_have_blocked
>> which allows for decay of pelt signals.
>>
>> Signed-off-by: Thara Gopinath <thara.gopinath@linaro.org>
>> ---
>>  kernel/sched/fair.c | 8 ++++++++
>>  1 file changed, 8 insertions(+)
>>
>> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
>> index 8da0222..311bb0b 100644
>> --- a/kernel/sched/fair.c
>> +++ b/kernel/sched/fair.c
>> @@ -7470,6 +7470,9 @@ static inline bool others_have_blocked(struct rq *rq)
>>  	if (READ_ONCE(rq->avg_dl.util_avg))
>>  		return true;
>>  
>> +	if (READ_ONCE(rq->avg_thermal.load_avg))
>> +		return true;
>> +
> 
> Given that struct sched_avg is 1 cacheline, the above is a pointless
> guaranteed cacheline miss if the arch doesn't
> CONFIG_HAVE_SCHED_THERMAL_PRESSURE.
Thanks for the review Peter. I see your suggestion in Patch 1 to fix
this issue. Will send out the next version implementing it.

> 
>>  #ifdef CONFIG_HAVE_SCHED_AVG_IRQ
>>  	if (READ_ONCE(rq->avg_irq.util_avg))
>>  		return true;
>> @@ -7495,6 +7498,7 @@ static bool __update_blocked_others(struct rq *rq, bool *done)
>>  {
>>  	const struct sched_class *curr_class;
>>  	u64 now = rq_clock_pelt(rq);
>> +	unsigned long thermal_pressure = arch_cpu_thermal_pressure(cpu_of(rq));
>>  	bool decayed;
>>  
>>  	/*
>> @@ -7505,6 +7509,8 @@ static bool __update_blocked_others(struct rq *rq, bool *done)
>>  
>>  	decayed = update_rt_rq_load_avg(now, rq, curr_class == &rt_sched_class) |
>>  		  update_dl_rq_load_avg(now, rq, curr_class == &dl_sched_class) |
>> +		  update_thermal_load_avg(rq_clock_task(rq), rq,
>> +					  thermal_pressure) 			|
>>  		  update_irq_load_avg(rq, 0);
>>  
>>  	if (others_have_blocked(rq))
> 
> That there indentation trainwreck is a reason to rename the function.
> 
> 	decayed = update_rt_rq_load_avg(now, rq, curr_class == &rt_sched_class) |
> 		  update_dl_rq_load_avg(now, rq, curr_class == &dl_sched_class) |
> 		  update_thermal_load_avg(rq_clock_task(rq), rq, thermal_pressure) |
> 		  update_irq_load_avg(rq, 0);
> 
> Is much better.

Did you intend to say here to rename  update_thermal_load_avg to
something else ?
> 
> But now that you made me look at that, I noticed it's using a different
> clock -- it is _NOT_ using now/rq_clock_pelt(), which means it'll not be
> in sync with the other averages.
> 
> Is there a good reason for that?

So I guess as Vincent has replied in his email, rq_clock_pelt adjusts
clock for frequency and cpu capacity invariance. Thermal pressure signal
is already accounted for it when updated from the thermal framework.
> 
>> @@ -10275,6 +10281,7 @@ static void task_tick_fair(struct rq *rq, struct task_struct *curr, int queued)
>>  {
>>  	struct cfs_rq *cfs_rq;
>>  	struct sched_entity *se = &curr->se;
>> +	unsigned long thermal_pressure = arch_cpu_thermal_pressure(cpu_of(rq));
>>  
>>  	for_each_sched_entity(se) {
>>  		cfs_rq = cfs_rq_of(se);
>> @@ -10286,6 +10293,7 @@ static void task_tick_fair(struct rq *rq, struct task_struct *curr, int queued)
>>  
>>  	update_misfit_status(curr, rq);
>>  	update_overutilized_status(task_rq(curr));
>> +	update_thermal_load_avg(rq_clock_task(rq), rq, thermal_pressure);
>>  }
> 
> I'm thinking this is the wrong place; should this not be in
> scheduler_tick(), right before calling sched_class::task_tick() ? Surely
> any execution will affect thermals, not only fair class execution.

I read all other comments from others on this. I agree. I will move this
to scheduler_tick.

> 


-- 
Warm Regards
Thara

  parent reply	other threads:[~2020-01-17 20:20 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-14 19:57 [Patch v8 0/7] Introduce Thermal Pressure Thara Gopinath
2020-01-14 19:57 ` [Patch v8 1/7] sched/pelt: Add support to track thermal pressure Thara Gopinath
2020-01-16 15:17   ` Peter Zijlstra
2020-01-23 19:15     ` Dietmar Eggemann
2020-01-24 19:07       ` Thara Gopinath
2020-01-27  9:28         ` Dietmar Eggemann
2020-01-28 13:32           ` Thara Gopinath
2020-01-28 16:15             ` Dietmar Eggemann
2020-02-13 12:03   ` Amit Kucheria
2020-02-13 12:31     ` Amit Kucheria
2020-01-14 19:57 ` [Patch v8 2/7] sched/topology: Add hook to read per cpu " Thara Gopinath
2020-01-14 19:57 ` [Patch v8 3/7] arm,arm64,drivers:Add infrastructure to store and update instantaneous " Thara Gopinath
2020-01-14 19:57 ` [Patch v8 4/7] sched/fair: Enable periodic update of average " Thara Gopinath
2020-01-16 15:15   ` Peter Zijlstra
2020-01-17 11:40     ` Quentin Perret
2020-01-17 12:31       ` Peter Zijlstra
2020-01-17 13:17         ` Vincent Guittot
2020-01-17 13:45           ` Quentin Perret
2020-01-17 13:22     ` Vincent Guittot
2020-01-17 14:55       ` Peter Zijlstra
2020-01-17 15:39         ` Vincent Guittot
2020-01-24 15:37           ` Dietmar Eggemann
2020-01-24 15:45             ` Vincent Guittot
2020-01-27 12:09               ` Dietmar Eggemann
2020-01-27 15:15                 ` Vincent Guittot
2020-01-29 15:41                   ` Dietmar Eggemann
2020-01-30  9:49                     ` Vincent Guittot
2020-01-17 20:20     ` Thara Gopinath [this message]
2020-01-14 19:57 ` [Patch v8 5/7] sched/fair: update cpu_capacity to reflect " Thara Gopinath
2020-01-14 19:57 ` [Patch v8 6/7] thermal/cpu-cooling: Update thermal pressure in case of a maximum frequency capping Thara Gopinath
2020-01-14 19:57 ` [Patch v8 7/7] sched/fair: Enable tuning of decay period Thara Gopinath
2020-01-17 11:47   ` Quentin Perret
2020-01-17 15:45     ` Thara Gopinath

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=5E2216FD.5040903@linaro.org \
    --to=thara.gopinath@linaro.org \
    --cc=amit.kachhap@gmail.com \
    --cc=amit.kucheria@verdurent.com \
    --cc=daniel.lezcano@linaro.org \
    --cc=dietmar.eggemann@arm.com \
    --cc=ionela.voinescu@arm.com \
    --cc=javi.merino@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=qperret@google.com \
    --cc=rui.zhang@intel.com \
    --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 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.