All of lore.kernel.org
 help / color / mirror / Atom feed
From: Patrick Bellasi <patrick.bellasi@arm.com>
To: Viresh Kumar <viresh.kumar@linaro.org>
Cc: linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org,
	Ingo Molnar <mingo@redhat.com>,
	Peter Zijlstra <peterz@infradead.org>,
	"Rafael J . Wysocki" <rafael.j.wysocki@intel.com>,
	Vincent Guittot <vincent.guittot@linaro.org>,
	Dietmar Eggemann <dietmar.eggemann@arm.com>,
	Morten Rasmussen <morten.rasmussen@arm.com>,
	Juri Lelli <juri.lelli@redhat.com>, Todd Kjos <tkjos@android.com>,
	Joel Fernandes <joelaf@google.com>
Subject: Re: [PATCH v3 1/6] cpufreq: schedutil: reset sg_cpus's flags at IDLE enter
Date: Tue, 12 Dec 2017 15:16:26 +0000	[thread overview]
Message-ID: <20171212151626.GA8264@e110439-lin> (raw)
In-Reply-To: <20171212113727.GO25177@vireshk-i7>

Hi Viresh,

On 12-Dec 17:07, Viresh Kumar wrote:
> On 07-12-17, 12:45, Patrick Bellasi wrote:
> > On 07-Dec 10:31, Viresh Kumar wrote:

[...]

> I think its important to fix the basic mechanism of util update than fixing
> corner cases with workarounds. I attempted a simpler approach (at least
> according to me :)). Please share your feedback on it. You can include that as
> part of your series, or I can send it separately if everyone finds it okay.

please go on and post this patch on the list, all other patches from
my series can follow on top, later.

Hereafter inline are some comments on your patch...

> 
> -- 
> viresh
> 
> -------------------------8<-------------------------
> From: Viresh Kumar <viresh.kumar@linaro.org>
> Date: Tue, 12 Dec 2017 15:43:26 +0530
> Subject: [PATCH] sched: Keep track of cpufreq utilization update flags
> 
> Currently the schedutil governor overwrites the sg_cpu->flags field on
> every call to the utilization handler. It was pretty good as the initial
> implementation of utilization handlers, there are several drawbacks
> though.
> 
> The biggest drawback is that the sg_cpu->flags field doesn't always
> represent the correct type of tasks that are enqueued on a CPU's rq. For
> example, if a fair task is enqueued while a RT or DL task is running, we
> will overwrite the flags with value 0 and that may take the CPU to lower
> OPPs unintentionally. There can be other corner cases as well which we
> aren't aware of currently.
> 
> This patch changes the current implementation to keep track of all the
> task types that are currently enqueued to the CPUs rq. There are two
> flags for every scheduling class now, one to set the flag and other one
> to clear it.

nit-pick: that's not completely correct, there is only one CLEAR flag
which is used to clear whatever other flags are passed in.

> The flag is set by the scheduling classes from the existing
> set of calls to cpufreq_update_util(), and the flag is cleared when the
> last task of the scheduling class is dequeued. For now, the util update
> handlers return immediately if they were called to clear the flag.
> 
> We can add more optimizations over this patch separately.
> 
> The last parameter of sugov_set_iowait_boost() is also dropped as the
> function can get it from sg_cpu anyway.

As I comment below, this should be on a different patch IMO.

> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>

[...]

> @@ -8,9 +8,14 @@
>   * Interface between cpufreq drivers and the scheduler:
>   */
>  
> +#define SCHED_CPUFREQ_CLEAR	(1U << 31)
>  #define SCHED_CPUFREQ_RT	(1U << 0)
> +#define SCHED_CPUFREQ_RT_CLEAR	(SCHED_CPUFREQ_RT | SCHED_CPUFREQ_CLEAR)
>  #define SCHED_CPUFREQ_DL	(1U << 1)
> -#define SCHED_CPUFREQ_IOWAIT	(1U << 2)
> +#define SCHED_CPUFREQ_DL_CLEAR	(SCHED_CPUFREQ_DL | SCHED_CPUFREQ_CLEAR)
> +#define SCHED_CPUFREQ_CFS	(1U << 2)
> +#define SCHED_CPUFREQ_CFS_CLEAR	(SCHED_CPUFREQ_CFS | SCHED_CPUFREQ_CLEAR)
> +#define SCHED_CPUFREQ_IOWAIT	(1U << 3)
>  
>  #define SCHED_CPUFREQ_RT_DL	(SCHED_CPUFREQ_RT | SCHED_CPUFREQ_DL)

Since you are already changing some flags position, maybe we can have
a better organization by using lower flags for "general bits" and
higher ones for class specific, i.e.

#define SCHED_CPUFREQ_CLEAR	(1U <<  0)
#define SCHED_CPUFREQ_IOWAIT	(1U <<  1)

#define SCHED_CPUFREQ_CFS	(1U <<  8)
#define SCHED_CPUFREQ_RT	(1U <<  9)
#define SCHED_CPUFREQ_DL	(1U << 10)
#define SCHED_CPUFREQ_RT_DL	(SCHED_CPUFREQ_RT | SCHED_CPUFREQ_DL)

#define SCHED_CPUFREQ_CFS_CLEAR	(SCHED_CPUFREQ_CFS | SCHED_CPUFREQ_CLEAR)
#define SCHED_CPUFREQ_RT_CLEAR	(SCHED_CPUFREQ_RT | SCHED_CPUFREQ_CLEAR)
#define SCHED_CPUFREQ_DL_CLEAR	(SCHED_CPUFREQ_DL | SCHED_CPUFREQ_CLEAR)

>  
> diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c
> index 2f52ec0f1539..7edfdc59ee8f 100644
> --- a/kernel/sched/cpufreq_schedutil.c
> +++ b/kernel/sched/cpufreq_schedutil.c
> @@ -187,10 +187,11 @@ static void sugov_get_util(unsigned long *util, unsigned long *max, int cpu)
>  	*max = cfs_max;
>  }
>  
> -static void sugov_set_iowait_boost(struct sugov_cpu *sg_cpu, u64 time,
> -				   unsigned int flags)
> +static void sugov_set_iowait_boost(struct sugov_cpu *sg_cpu, u64 time)
>  {
> -	if (flags & SCHED_CPUFREQ_IOWAIT) {
> +	if (sg_cpu->flags & SCHED_CPUFREQ_IOWAIT) {
> +		sg_cpu->flags &= ~SCHED_CPUFREQ_IOWAIT;
> +

This function should still work if we pass in flags as a parameter.
Thus, this looks like an change/optimization of the
sugov_set_iowait_boost API, which maybe should be better moved into a
separate patch on top of this one.

>  		if (sg_cpu->iowait_boost_pending)
>  			return;
>  

[...]

> @@ -655,7 +669,7 @@ static int sugov_start(struct cpufreq_policy *policy)
>  		memset(sg_cpu, 0, sizeof(*sg_cpu));
>  		sg_cpu->cpu = cpu;
>  		sg_cpu->sg_policy = sg_policy;
> -		sg_cpu->flags = SCHED_CPUFREQ_RT;
> +		sg_cpu->flags = 0;

Juri already pointed out this change, why it's needed?
Perhaps a note in the changelog can be useful.

>  		sg_cpu->iowait_boost_max = policy->cpuinfo.max_freq;
>  	}
>  

[...]

-- 
#include <best/regards.h>

Patrick Bellasi

  parent reply	other threads:[~2017-12-12 15:16 UTC|newest]

Thread overview: 81+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-30 11:47 [PATCH v3 0/6] cpufreq: schedutil: fixes for flags updates Patrick Bellasi
2017-11-30 11:47 ` [PATCH v3 1/6] cpufreq: schedutil: reset sg_cpus's flags at IDLE enter Patrick Bellasi
2017-11-30 13:12   ` Juri Lelli
2017-11-30 15:41     ` Patrick Bellasi
2017-11-30 16:02       ` Juri Lelli
2017-11-30 16:19         ` Patrick Bellasi
2017-11-30 16:45           ` Juri Lelli
2017-12-07  5:01   ` Viresh Kumar
2017-12-07 12:45     ` Patrick Bellasi
2017-12-07 15:55       ` Dietmar Eggemann
2017-12-12 11:37       ` Viresh Kumar
2017-12-12 13:38         ` Juri Lelli
2017-12-12 14:40           ` Viresh Kumar
2017-12-12 14:56             ` Juri Lelli
2017-12-12 15:18               ` Patrick Bellasi
2017-12-12 15:16         ` Patrick Bellasi [this message]
2017-12-13  9:06           ` Viresh Kumar
2017-12-20 14:33   ` Peter Zijlstra
2017-12-20 14:51     ` Patrick Bellasi
2017-11-30 11:47 ` [PATCH v3 2/6] cpufreq: schedutil: ensure max frequency while running RT/DL tasks Patrick Bellasi
2017-11-30 13:17   ` Juri Lelli
2017-11-30 15:45     ` Patrick Bellasi
2017-11-30 16:03       ` Juri Lelli
2017-12-07  5:05   ` Viresh Kumar
2017-12-07 14:18     ` Patrick Bellasi
2017-11-30 11:47 ` [PATCH v3 3/6] cpufreq: schedutil: update CFS util only if used Patrick Bellasi
2017-11-30 13:22   ` Juri Lelli
2017-11-30 15:57     ` Patrick Bellasi
2017-12-07  5:15       ` Viresh Kumar
2017-12-07 14:19         ` Patrick Bellasi
2017-12-14  4:45           ` Viresh Kumar
2017-11-30 11:47 ` [PATCH v3 4/6] sched/rt: fast switch to maximum frequency when RT tasks are scheduled Patrick Bellasi
2017-11-30 13:28   ` Juri Lelli
2017-12-06  9:39   ` Vincent Guittot
2017-12-06 11:38     ` Patrick Bellasi
2017-12-06 12:36       ` Vincent Guittot
2017-11-30 11:47 ` [PATCH v3 5/6] cpufreq: schedutil: relax rate-limiting while running RT/DL tasks Patrick Bellasi
2017-11-30 13:36   ` Juri Lelli
2017-11-30 15:54     ` Patrick Bellasi
2017-11-30 16:06       ` Juri Lelli
2017-11-30 11:47 ` [PATCH v3 6/6] cpufreq: schedutil: ignore sugov kthreads Patrick Bellasi
2017-11-30 13:41   ` Juri Lelli
2017-11-30 16:02     ` Patrick Bellasi
2017-11-30 16:12       ` Juri Lelli
2017-11-30 16:42         ` Patrick Bellasi
2017-12-07  9:24           ` Viresh Kumar
2017-12-07 15:47             ` Patrick Bellasi
2017-12-20 15:30 ` [PATCH v3 0/6] cpufreq: schedutil: fixes for flags updates Peter Zijlstra
2017-12-20 15:43   ` Peter Zijlstra
2017-12-21  9:15     ` Viresh Kumar
2017-12-21 10:25       ` Peter Zijlstra
2017-12-21 10:30         ` Viresh Kumar
2017-12-21 10:39           ` Peter Zijlstra
2017-12-21 10:43             ` Viresh Kumar
2017-12-22  8:30               ` Peter Zijlstra
2017-12-20 15:56   ` Peter Zijlstra
2017-12-31  9:43     ` Claudio Scordino
2018-01-02 13:31       ` Claudio Scordino
2017-12-20 17:38   ` Juri Lelli
2017-12-20 18:16     ` Peter Zijlstra
2017-12-22 10:06     ` Peter Zijlstra
2017-12-22 11:02       ` Patrick Bellasi
2017-12-22 11:46         ` Peter Zijlstra
2017-12-22 12:07           ` Juri Lelli
2017-12-22 12:14             ` Patrick Bellasi
2017-12-22 12:22               ` Peter Zijlstra
2017-12-22 12:07           ` Patrick Bellasi
2017-12-22 12:19             ` Peter Zijlstra
2017-12-22 12:27               ` Juri Lelli
2017-12-22 12:38               ` Patrick Bellasi
2017-12-22 12:43                 ` Juri Lelli
2017-12-22 12:50                   ` Patrick Bellasi
2017-12-22 13:01                     ` Juri Lelli
2017-12-22 12:10           ` Peter Zijlstra
2017-12-22 12:25             ` Patrick Bellasi
2017-12-21  7:34   ` Viresh Kumar
2018-02-06 10:55   ` Claudio Scordino
2018-02-06 15:43     ` Patrick Bellasi
2018-02-06 18:14       ` Claudio Scordino
2018-02-06 18:36         ` Patrick Bellasi
2018-02-08 16:14           ` Claudio Scordino

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=20171212151626.GA8264@e110439-lin \
    --to=patrick.bellasi@arm.com \
    --cc=dietmar.eggemann@arm.com \
    --cc=joelaf@google.com \
    --cc=juri.lelli@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=morten.rasmussen@arm.com \
    --cc=peterz@infradead.org \
    --cc=rafael.j.wysocki@intel.com \
    --cc=tkjos@android.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.