sched: scheduler-driven cpu frequency selection
authorMichael Turquette <mturquette@baylibre.com>
Tue, 30 Jun 2015 11:45:48 +0000 (12:45 +0100)
committerLeo Yan <leo.yan@linaro.org>
Tue, 10 May 2016 08:53:22 +0000 (16:53 +0800)
commita967a45c71ae8978b2c0d06ee0de23f47737cfd5
tree44cbaabd056ec361201cc16e70668899b24b720a
parentc3b2e765af4af80ada13e5e34a26a28e3081dd0e
sched: scheduler-driven cpu frequency selection

Scheduler-driven CPU frequency selection hopes to exploit both
per-task and global information in the scheduler to improve frequency
selection policy, achieving lower power consumption, improved
responsiveness/performance, and less reliance on heuristics and
tunables. For further discussion on the motivation of this integration
see [0].

This patch implements a shim layer between the Linux scheduler and the
cpufreq subsystem. The interface accepts capacity requests from the
CFS, RT and deadline sched classes. The requests from each sched class
are summed on each CPU with a margin applied to the CFS and RT
capacity requests to provide some headroom. Deadline requests are
expected to be precise enough given their nature to not require
headroom. The maximum total capacity request for a CPU in a frequency
domain drives the requested frequency for that domain.

Policy is determined by both the sched classes and this shim layer.

Note that this algorithm is event-driven. There is no polling loop to
check cpu idle time nor any other method which is unsynchronized with
the scheduler, aside from a throttling mechanism to ensure frequency
changes are not attempted faster than the hardware can accommodate them.

Thanks to Juri Lelli <juri.lelli@arm.com> for contributing design ideas,
code and test results, and to Ricky Liang <jcliang@chromium.org>
for initialization and static key inc/dec fixes.

[0] http://article.gmane.org/gmane.linux.kernel/1499836

[smuckle@linaro.org: various additions and fixes, revised commit text]

CC: Ricky Liang <jcliang@chromium.org>
Signed-off-by: Michael Turquette <mturquette@baylibre.com>
Signed-off-by: Juri Lelli <juri.lelli@arm.com>
Signed-off-by: Steve Muckle <smuckle@linaro.org>
drivers/cpufreq/Kconfig
include/linux/cpufreq.h
include/linux/sched.h
kernel/sched/Makefile
kernel/sched/cpufreq_sched.c [new file with mode: 0644]
kernel/sched/fair.c
kernel/sched/sched.h