cpuidle: menu: Skip tick_nohz_get_sleep_length() call in some cases
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 10 Aug 2023 18:36:36 +0000 (20:36 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 17 Aug 2023 09:28:38 +0000 (11:28 +0200)
commit5484e31bbbff285f9505c4766373f840ffb746e5
treeeea4a30c34cb6612a7daa7223af2c866a4f1949b
parent2662342079f54b8a940f7094c197c99458caeb0d
cpuidle: menu: Skip tick_nohz_get_sleep_length() call in some cases

Because the cost of calling tick_nohz_get_sleep_length() may increase
in the future, reorder the code in menu_select() so it first uses the
statistics to determine the expected idle duration.  If that value is
higher than RESIDENCY_THRESHOLD_NS, tick_nohz_get_sleep_length() will
be called to obtain the time till the closest timer and refine the
idle duration prediction if necessary.

This causes the governor to always take the full overhead of
get_typical_interval() with the assumption that the cost will be
amortized by skipping the tick_nohz_get_sleep_length() call in the
cases when the predicted idle duration is relatively very small.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Tested-by: Doug Smythies <dsmythies@telus.net>
drivers/cpuidle/governors/gov.h [new file with mode: 0644]
drivers/cpuidle/governors/menu.c
drivers/cpuidle/governors/teo.c