Commit graph

3 commits

Author SHA1 Message Date
ztc1997
7f393c3513 cpufreq: {schedutil, schedhorizon}: Allow single-CPU frequency to drop without idling
Given that a CPU's clock is gated at even the shallowest idle state,
waiting until a CPU idles at least once before reducing its frequency is
putting the cart before the horse. For long-running workloads with low
compute needs, requiring an idle call since the last frequency update to
lower the CPU's frequency results in significantly increased energy usage.

Given that there is already a mechanism in place to ratelimit frequency
changes, this heuristic is wholly unnecessary.

Allow single-CPU performance domains to drop their frequency without
requiring an idle call in between to improve energy. Right off the bat,
this reduces CPU power consumption by 7.5% playing a cat gif in Firefox on
a Pixel 8 (270 mW -> 250 mW). And there is no visible loss of performance.

Signed-off-by: Sultan Alsawaf <sultan@kerneltoast.com>
2025-01-21 21:28:32 +01:00
ztc1997
0e4add4b71 schedhorizon: Sync with schedutil 2025-01-21 21:28:28 +01:00
ztc1997
2a7073f6d6 schedhorizon: Introduce schedhorizon cpufreq governor
* This is a modified version of schedutil, introducing two new tunables: "efficient_freq" and "up_delay".
* Only raise cpufreq to the non-efficient one (higher than effcient frequencies) if the governor keeps requiring non-efficient frequencies for more than up_delay time.
* Override the new frequencies with the efficient one if the consecutive request time doesn't reach up_delay.
* The two tunables support multiple args, e.g. you can set "1248000 1401600" for "efficient_freq" and set "50 60" for "up_delay", which means it would wait 50ms before raising the frequency to 1248mhz and wait for 60ms before raising the frequency to 1401mhz.

[Flopster101: move the kconfig entry to the proper section.]
2025-01-21 21:28:17 +01:00