arm: Enable max freq invariant scheduler load-tracking and capacity support
Maximum Frequency Invariance has to be part of Cpu Invariance because Frequency Invariance deals only with differences in load-tracking introduces by Dynamic Frequency Scaling and not with limiting the possible range of cpu frequency. By placing Maximum Frequency Invariance into Cpu Invariance, load-tracking is scaled via arch_scale_cpu_capacity() in __update_load_avg() and cpu capacity is scaled via arch_scale_cpu_capacity() in update_cpu_capacity(). To be able to save the extra multiplication in the scheduler hotpath (__update_load_avg()) we could: 1 Inform cpufreq about base cpu capacity at boot and let it handle scale_cpu_capacity() as well. 2 Use the cpufreq policy callback which would update a per-cpu current cpu_scale and this value would be return in scale_cpu_capacity(). 3 Use per-cpu current max_freq_scale and current cpu_scale with the current patch. Signed-off-by: Dietmar Eggemann <dietmar.eggemann@arm.com>
This commit is contained in:
parent
05a773bfc9
commit
5414a72fc3
1 changed files with 6 additions and 0 deletions
|
@ -44,7 +44,13 @@ static DEFINE_PER_CPU(unsigned long, cpu_scale);
|
||||||
|
|
||||||
unsigned long scale_cpu_capacity(struct sched_domain *sd, int cpu)
|
unsigned long scale_cpu_capacity(struct sched_domain *sd, int cpu)
|
||||||
{
|
{
|
||||||
|
#if CONFIG_CPU_FREQ
|
||||||
|
unsigned long max_freq_scale = cpufreq_scale_max_freq_capacity(cpu);
|
||||||
|
|
||||||
|
return per_cpu(cpu_scale, cpu) * max_freq_scale >> SCHED_CAPACITY_SHIFT;
|
||||||
|
#else
|
||||||
return per_cpu(cpu_scale, cpu);
|
return per_cpu(cpu_scale, cpu);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void set_capacity_scale(unsigned int cpu, unsigned long capacity)
|
static void set_capacity_scale(unsigned int cpu, unsigned long capacity)
|
||||||
|
|
Loading…
Add table
Reference in a new issue