summaryrefslogtreecommitdiffstats
path: root/mm/mm_init.c
diff options
context:
space:
mode:
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>2021-06-02 20:16:32 +0200
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2021-06-11 18:36:45 +0200
commitc410a9a142f152006c21a858d734a9f868bc90a6 (patch)
tree0db42ae754e8d1b5034930ee506d6a12382dd077 /mm/mm_init.c
parentb18e0de1cf85eed6e9ced086d6323e867d4b57aa (diff)
downloadlinux-c410a9a142f152006c21a858d734a9f868bc90a6.tar.gz
linux-c410a9a142f152006c21a858d734a9f868bc90a6.tar.bz2
linux-c410a9a142f152006c21a858d734a9f868bc90a6.zip
cpuidle: teo: Change the main idle state selection logic
Two aspects of the current main idle state selection logic in the TEO (Timer Events Oriented) cpuidle governor are quite questionable. First of all, the "hits" and "misses" metrics used by it are only updated for a given idle state if the time till the next timer event ("sleep length") is between the target residency of that state and the target residency of the next one. Consequently, they are likely to become stale if the sleep length tends to fall outside that interval which increases the likelihood of subomtimal idle state selection. Second, the decision on whether or not to select the idle state "matching" the sleep length is based on the metrics collected for that state alone, whereas in principle the metrics collected for the other idle states should be taken into consideration when that decision is made. For example, if the measured idle duration is less than the target residency of the idle state "matching" the sleep length, then it is also less than the target residency of any deeper idle state and that should be taken into account when considering whether or not to select any of those states, but currently it is not. In order to address the above shortcomings, modify the main idle state selection logic in the TEO governor to take the metrics collected for all of the idle states into account when deciding whether or not to select the one "matching" the sleep length. Moreover, drop the "misses" metric that becomes redundant after the above change and rename the "early_hits" metric to "intercepts" so that its role is better reflected by its name (the idea being that if a CPU wakes up earlier than indicated by the sleep length, then it must be a result of a non-timer interrupt that "intercepts" the CPU). Also rename the states[] array in struct struct teo_cpu to state_bins[] to avoid confusing it with the states[] array in struct cpuidle_driver and update the documentation to match the new code (and make it more comprehensive while at it). Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat (limited to 'mm/mm_init.c')
0 files changed, 0 insertions, 0 deletions