Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1589532
| From | Patrick Bellasi <patrick.bellasi@arm.com> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [RFC v3 5/5] sched/{core,cpufreq_schedutil}: add capacity clamping for RT/DL tasks |
| Date | 2017-02-28 16:00 +0100 |
| Message-ID | <tfRpV-5QG-51@gated-at.bofh.it> (permalink) |
| References | <tfRge-5JN-31@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
Currently schedutil enforce a maximum OPP when RT/DL tasks are RUNNABLE.
Such a mandatory policy can be made more tunable from userspace thus
allowing for example to define a reasonable max capacity (i.e.
frequency) which is required for the execution of a specific RT/DL
workload. This will contribute to make the RT class more "friendly" for
power/energy sensible applications.
This patch extends the usage of capacity_{min,max} to the RT/DL classes.
Whenever a task in these classes is RUNNABLE, the capacity required is
defined by the constraints of the control group that task belongs to.
Signed-off-by: Patrick Bellasi <patrick.bellasi@arm.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Cc: linux-kernel@vger.kernel.org
Cc: linux-pm@vger.kernel.org
---
kernel/sched/cpufreq_schedutil.c | 15 +++++++--------
1 file changed, 7 insertions(+), 8 deletions(-)
diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c
index 51484f7..18abd62 100644
--- a/kernel/sched/cpufreq_schedutil.c
+++ b/kernel/sched/cpufreq_schedutil.c
@@ -256,7 +256,9 @@ static void sugov_update_single(struct update_util_data *hook, u64 time,
return;
if (flags & SCHED_CPUFREQ_RT_DL) {
- next_f = policy->cpuinfo.max_freq;
+ util = cap_clamp_cpu_util(smp_processor_id(),
+ SCHED_CAPACITY_SCALE);
+ next_f = get_next_freq(sg_cpu, util, policy->cpuinfo.max_freq);
} else {
sugov_get_util(&util, &max);
sugov_iowait_boost(sg_cpu, &util, &max);
@@ -272,15 +274,11 @@ static unsigned int sugov_next_freq_shared(struct sugov_cpu *sg_cpu,
{
struct sugov_policy *sg_policy = sg_cpu->sg_policy;
struct cpufreq_policy *policy = sg_policy->policy;
- unsigned int max_f = policy->cpuinfo.max_freq;
u64 last_freq_update_time = sg_policy->last_freq_update_time;
unsigned int cap_max = SCHED_CAPACITY_SCALE;
unsigned int cap_min = 0;
unsigned int j;
- if (flags & SCHED_CPUFREQ_RT_DL)
- return max_f;
-
sugov_iowait_boost(sg_cpu, &util, &max);
/* Initialize clamping range based on caller CPU constraints */
@@ -308,10 +306,11 @@ static unsigned int sugov_next_freq_shared(struct sugov_cpu *sg_cpu,
j_sg_cpu->iowait_boost = 0;
continue;
}
- if (j_sg_cpu->flags & SCHED_CPUFREQ_RT_DL)
- return max_f;
- j_util = j_sg_cpu->util;
+ if (j_sg_cpu->flags & SCHED_CPUFREQ_RT_DL)
+ j_util = cap_clamp_cpu_util(j, SCHED_CAPACITY_SCALE);
+ else
+ j_util = j_sg_cpu->util;
j_max = j_sg_cpu->max;
if (j_util * max > j_max * util) {
util = j_util;
--
2.7.4
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[RFC v3 0/5] Add capacity capping support to the CPU controller Patrick Bellasi <patrick.bellasi@arm.com> - 2017-02-28 16:00 +0100
[RFC v3 2/5] sched/core: track CPU's capacity_{min,max} Patrick Bellasi <patrick.bellasi@arm.com> - 2017-02-28 16:00 +0100
[RFC v3 3/5] sched/core: sync capacity_{min,max} between slow and fast paths Patrick Bellasi <patrick.bellasi@arm.com> - 2017-02-28 16:00 +0100
[RFC v3 5/5] sched/{core,cpufreq_schedutil}: add capacity clamping for RT/DL tasks Patrick Bellasi <patrick.bellasi@arm.com> - 2017-02-28 16:00 +0100
Re: [RFC v3 5/5] sched/{core,cpufreq_schedutil}: add capacity clamping for RT/DL tasks "Joel Fernandes (Google)" <joel.opensrc@gmail.com> - 2017-03-13 11:10 +0100
csiph-web