All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3] cpufreq: schedutil: rate limits for SCHED_DEADLINE
@ 2018-03-08 10:29 Claudio Scordino
  2018-03-08 10:33 ` Viresh Kumar
  2018-03-08 11:13 ` Rafael J. Wysocki
  0 siblings, 2 replies; 3+ messages in thread
From: Claudio Scordino @ 2018-03-08 10:29 UTC (permalink / raw)
  To: Peter Zijlstra, Rafael J . Wysocki
  Cc: Claudio Scordino, Ingo Molnar, Patrick Bellasi, Dietmar Eggemann,
	Morten Rasmussen, Juri Lelli, Viresh Kumar, Vincent Guittot,
	Todd Kjos, Joel Fernandes, linux-pm, linux-kernel

When the SCHED_DEADLINE scheduling class increases the CPU utilization,
we should not wait for the rate limit, otherwise we may miss some
deadline.

Tests using rt-app on Exynos5422 with up to 10 SCHED_DEADLINE tasks have
shown reductions of even 10% of deadline misses with a negligible
increase of energy consumption (measured through Baylibre Cape).

Signed-off-by: Claudio Scordino <claudio@evidence.eu.com>
CC: Ingo Molnar <mingo@redhat.com>
CC: Patrick Bellasi <patrick.bellasi@arm.com>
CC: Dietmar Eggemann <dietmar.eggemann@arm.com>
CC: Morten Rasmussen <morten.rasmussen@arm.com>
CC: Juri Lelli <juri.lelli@redhat.com>
CC: Viresh Kumar <viresh.kumar@linaro.org>
CC: Vincent Guittot <vincent.guittot@linaro.org>
CC: Todd Kjos <tkjos@android.com>
CC: Joel Fernandes <joelaf@google.com>
CC: linux-pm@vger.kernel.org
CC: linux-kernel@vger.kernel.org
---
Changes from v2:
 - Rate limit ignored also in case of "fast switch"
 - Specific routine added
---
Changes from v1:
 - Logic moved from sugov_should_update_freq() to
   sugov_update_single()/_shared() to not duplicate data structures
 - Rate limit not ignored in case of "fast switch"
---
 kernel/sched/cpufreq_schedutil.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c
index 7936f54..13f9cce 100644
--- a/kernel/sched/cpufreq_schedutil.c
+++ b/kernel/sched/cpufreq_schedutil.c
@@ -260,6 +260,17 @@ static bool sugov_cpu_is_busy(struct sugov_cpu *sg_cpu)
 static inline bool sugov_cpu_is_busy(struct sugov_cpu *sg_cpu) { return false; }
 #endif /* CONFIG_NO_HZ_COMMON */
 
+/*
+ * Make sugov_should_update_freq() ignore the rate limit when DL
+ * has increased the utilization.
+ */
+static inline
+void set_dl_rate_limit(struct sugov_cpu *sg_cpu, struct sugov_policy *sg_policy)
+{
+	if (cpu_util_dl(cpu_rq(sg_cpu->cpu)) > sg_cpu->util_dl)
+		sg_policy->need_freq_update = true;
+}
+
 static void sugov_update_single(struct update_util_data *hook, u64 time,
 				unsigned int flags)
 {
@@ -273,6 +284,8 @@ static void sugov_update_single(struct update_util_data *hook, u64 time,
 	sugov_set_iowait_boost(sg_cpu, time);
 	sg_cpu->last_update = time;
 
+	set_dl_rate_limit(sg_cpu, sg_policy);
+
 	if (!sugov_should_update_freq(sg_policy, time))
 		return;
 
@@ -354,6 +367,8 @@ static void sugov_update_shared(struct update_util_data *hook, u64 time,
 
 	raw_spin_lock(&sg_policy->update_lock);
 
+	set_dl_rate_limit(sg_cpu, sg_policy);
+
 	sugov_get_util(sg_cpu);
 	sg_cpu->flags = flags;
 
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH v3] cpufreq: schedutil: rate limits for SCHED_DEADLINE
  2018-03-08 10:29 [PATCH v3] cpufreq: schedutil: rate limits for SCHED_DEADLINE Claudio Scordino
@ 2018-03-08 10:33 ` Viresh Kumar
  2018-03-08 11:13 ` Rafael J. Wysocki
  1 sibling, 0 replies; 3+ messages in thread
From: Viresh Kumar @ 2018-03-08 10:33 UTC (permalink / raw)
  To: Claudio Scordino
  Cc: Peter Zijlstra, Rafael J . Wysocki, Ingo Molnar, Patrick Bellasi,
	Dietmar Eggemann, Morten Rasmussen, Juri Lelli, Vincent Guittot,
	Todd Kjos, Joel Fernandes, linux-pm, linux-kernel

On 08-03-18, 11:29, Claudio Scordino wrote:
> When the SCHED_DEADLINE scheduling class increases the CPU utilization,
> we should not wait for the rate limit, otherwise we may miss some
> deadline.
> 
> Tests using rt-app on Exynos5422 with up to 10 SCHED_DEADLINE tasks have
> shown reductions of even 10% of deadline misses with a negligible
> increase of energy consumption (measured through Baylibre Cape).
> 
> Signed-off-by: Claudio Scordino <claudio@evidence.eu.com>
> CC: Ingo Molnar <mingo@redhat.com>
> CC: Patrick Bellasi <patrick.bellasi@arm.com>
> CC: Dietmar Eggemann <dietmar.eggemann@arm.com>
> CC: Morten Rasmussen <morten.rasmussen@arm.com>
> CC: Juri Lelli <juri.lelli@redhat.com>
> CC: Viresh Kumar <viresh.kumar@linaro.org>
> CC: Vincent Guittot <vincent.guittot@linaro.org>
> CC: Todd Kjos <tkjos@android.com>
> CC: Joel Fernandes <joelaf@google.com>
> CC: linux-pm@vger.kernel.org
> CC: linux-kernel@vger.kernel.org
> ---
> Changes from v2:
>  - Rate limit ignored also in case of "fast switch"
>  - Specific routine added
> ---
> Changes from v1:
>  - Logic moved from sugov_should_update_freq() to
>    sugov_update_single()/_shared() to not duplicate data structures
>  - Rate limit not ignored in case of "fast switch"
> ---
>  kernel/sched/cpufreq_schedutil.c | 15 +++++++++++++++
>  1 file changed, 15 insertions(+)
> 
> diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c
> index 7936f54..13f9cce 100644
> --- a/kernel/sched/cpufreq_schedutil.c
> +++ b/kernel/sched/cpufreq_schedutil.c
> @@ -260,6 +260,17 @@ static bool sugov_cpu_is_busy(struct sugov_cpu *sg_cpu)
>  static inline bool sugov_cpu_is_busy(struct sugov_cpu *sg_cpu) { return false; }
>  #endif /* CONFIG_NO_HZ_COMMON */
>  
> +/*
> + * Make sugov_should_update_freq() ignore the rate limit when DL
> + * has increased the utilization.
> + */
> +static inline
> +void set_dl_rate_limit(struct sugov_cpu *sg_cpu, struct sugov_policy *sg_policy)

Maybe it could be renamed as ignore_dl_rate_limit() ? Lets see what others have
to say. But looks fine otherwise.

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

-- 
viresh

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH v3] cpufreq: schedutil: rate limits for SCHED_DEADLINE
  2018-03-08 10:29 [PATCH v3] cpufreq: schedutil: rate limits for SCHED_DEADLINE Claudio Scordino
  2018-03-08 10:33 ` Viresh Kumar
@ 2018-03-08 11:13 ` Rafael J. Wysocki
  1 sibling, 0 replies; 3+ messages in thread
From: Rafael J. Wysocki @ 2018-03-08 11:13 UTC (permalink / raw)
  To: Claudio Scordino
  Cc: Peter Zijlstra, Rafael J . Wysocki, Ingo Molnar, Patrick Bellasi,
	Dietmar Eggemann, Morten Rasmussen, Juri Lelli, Viresh Kumar,
	Vincent Guittot, Todd Kjos, Joel Fernandes, Linux PM,
	Linux Kernel Mailing List

On Thu, Mar 8, 2018 at 11:29 AM, Claudio Scordino
<claudio@evidence.eu.com> wrote:
> When the SCHED_DEADLINE scheduling class increases the CPU utilization,
> we should not wait for the rate limit, otherwise we may miss some
> deadline.
>
> Tests using rt-app on Exynos5422 with up to 10 SCHED_DEADLINE tasks have
> shown reductions of even 10% of deadline misses with a negligible
> increase of energy consumption (measured through Baylibre Cape).
>
> Signed-off-by: Claudio Scordino <claudio@evidence.eu.com>
> CC: Ingo Molnar <mingo@redhat.com>
> CC: Patrick Bellasi <patrick.bellasi@arm.com>
> CC: Dietmar Eggemann <dietmar.eggemann@arm.com>
> CC: Morten Rasmussen <morten.rasmussen@arm.com>
> CC: Juri Lelli <juri.lelli@redhat.com>
> CC: Viresh Kumar <viresh.kumar@linaro.org>
> CC: Vincent Guittot <vincent.guittot@linaro.org>
> CC: Todd Kjos <tkjos@android.com>
> CC: Joel Fernandes <joelaf@google.com>
> CC: linux-pm@vger.kernel.org
> CC: linux-kernel@vger.kernel.org
> ---
> Changes from v2:
>  - Rate limit ignored also in case of "fast switch"
>  - Specific routine added
> ---
> Changes from v1:
>  - Logic moved from sugov_should_update_freq() to
>    sugov_update_single()/_shared() to not duplicate data structures
>  - Rate limit not ignored in case of "fast switch"
> ---
>  kernel/sched/cpufreq_schedutil.c | 15 +++++++++++++++
>  1 file changed, 15 insertions(+)
>
> diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c
> index 7936f54..13f9cce 100644
> --- a/kernel/sched/cpufreq_schedutil.c
> +++ b/kernel/sched/cpufreq_schedutil.c
> @@ -260,6 +260,17 @@ static bool sugov_cpu_is_busy(struct sugov_cpu *sg_cpu)
>  static inline bool sugov_cpu_is_busy(struct sugov_cpu *sg_cpu) { return false; }
>  #endif /* CONFIG_NO_HZ_COMMON */
>
> +/*
> + * Make sugov_should_update_freq() ignore the rate limit when DL
> + * has increased the utilization.
> + */
> +static inline

I wouldn't break the line here

> +void set_dl_rate_limit(struct sugov_cpu *sg_cpu, struct sugov_policy *sg_policy)

and the name might be better as Viresh said, but overall

Reviewed-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

> +{
> +       if (cpu_util_dl(cpu_rq(sg_cpu->cpu)) > sg_cpu->util_dl)
> +               sg_policy->need_freq_update = true;
> +}
> +
>  static void sugov_update_single(struct update_util_data *hook, u64 time,
>                                 unsigned int flags)
>  {
> @@ -273,6 +284,8 @@ static void sugov_update_single(struct update_util_data *hook, u64 time,
>         sugov_set_iowait_boost(sg_cpu, time);
>         sg_cpu->last_update = time;
>
> +       set_dl_rate_limit(sg_cpu, sg_policy);
> +
>         if (!sugov_should_update_freq(sg_policy, time))
>                 return;
>
> @@ -354,6 +367,8 @@ static void sugov_update_shared(struct update_util_data *hook, u64 time,
>
>         raw_spin_lock(&sg_policy->update_lock);
>
> +       set_dl_rate_limit(sg_cpu, sg_policy);
> +
>         sugov_get_util(sg_cpu);
>         sg_cpu->flags = flags;
>
> --
> 2.7.4
>

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2018-03-08 11:13 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-03-08 10:29 [PATCH v3] cpufreq: schedutil: rate limits for SCHED_DEADLINE Claudio Scordino
2018-03-08 10:33 ` Viresh Kumar
2018-03-08 11:13 ` Rafael J. Wysocki

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.