linux-xiaomi-chiron/include/linux/sched
Lukasz Luba 8f1b971b47 sched/cpufreq: Consider reduced CPU capacity in energy calculation
Energy Aware Scheduling (EAS) needs to predict the decisions made by
SchedUtil. The map_util_freq() exists to do that.

There are corner cases where the max allowed frequency might be reduced
(due to thermal). SchedUtil as a CPUFreq governor, is aware of that
but EAS is not. This patch aims to address it.

SchedUtil stores the maximum allowed frequency in
'sugov_policy::next_freq' field. EAS has to predict that value, which is
the real used frequency. That value is made after a call to
cpufreq_driver_resolve_freq() which clamps to the CPUFreq policy limits.
In the existing code EAS is not able to predict that real frequency.
This leads to energy estimation errors.

To avoid wrong energy estimation in EAS (due to frequency miss prediction)
make sure that the step which calculates Performance Domain frequency,
is also aware of the allowed CPU capacity.

Furthermore, modify map_util_freq() to not extend the frequency value.
Instead, use map_util_perf() to extend the util value in both places:
SchedUtil and EAS, but for EAS clamp it to max allowed CPU capacity.
In the end, we achieve the same desirable behavior for both subsystems
and alignment in regards to the real CPU frequency.

Signed-off-by: Lukasz Luba <lukasz.luba@arm.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> (For the schedutil part)
Link: https://lore.kernel.org/r/20210614191238.23224-1-lukasz.luba@arm.com
2021-06-17 14:11:43 +02:00
..
autogroup.h
clock.h
coredump.h mm, oom_adj: don't loop through tasks in __set_oom_adj when not necessary 2020-10-13 18:38:35 -07:00
cpufreq.h sched/cpufreq: Consider reduced CPU capacity in energy calculation 2021-06-17 14:11:43 +02:00
cputime.h
deadline.h
debug.h treewide: Convert macro and uses of __section(foo) to __section("foo") 2020-10-25 14:51:49 -07:00
hotplug.h sched/hotplug: Consolidate task migration on CPU unplug 2020-11-10 18:38:58 +01:00
idle.h
init.h
isolation.h isolcpus: Affine unbound kernel threads to housekeeping cpus 2020-06-15 14:10:03 +02:00
jobctl.h signal: kill JOBCTL_TASK_WORK 2020-12-12 09:17:38 -07:00
loadavg.h sched: nohz: stop passing around unused "ticks" parameter. 2020-07-22 10:22:04 +02:00
mm.h mm: honor PF_MEMALLOC_PIN for all movable pages 2021-05-05 11:27:26 -07:00
nohz.h timers/nohz: Update NOHZ load in remote tick 2020-01-28 21:36:44 +01:00
numa_balancing.h
prio.h sched: Remove USER_PRIO, TASK_USER_PRIO and MAX_USER_PRIO 2021-02-17 14:08:17 +01:00
rt.h
sd_flags.h sched/topology: Mark SD_NUMA as SDF_NEEDS_GROUPS 2020-08-19 10:49:50 +02:00
signal.h signal: Factor force_sig_perf out of perf_sigtrap 2021-05-18 16:20:54 -05:00
smt.h
stat.h sched: Make nr_iowait_cpu() return 32-bit value 2021-05-12 21:34:16 +02:00
sysctl.h sched: Warn on long periods of pending need_resched 2021-04-21 13:55:41 +02:00
task.h kernel: provide create_io_thread() helper 2021-03-04 15:45:03 -07:00
task_stack.h
topology.h sched/topology,schedutil: Wrap sched domains rebuild 2020-11-19 11:25:47 +01:00
types.h
user.h fanotify: configurable limits via sysfs 2021-03-16 16:49:31 +01:00
wake_q.h
xacct.h