]> git.baikalelectronics.ru Git - kernel.git/commit
cpuidle,menu: smooth out measured_us calculation
authorRik van Riel <riel@redhat.com>
Tue, 3 Nov 2015 22:34:19 +0000 (17:34 -0500)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Tue, 17 Nov 2015 01:24:25 +0000 (02:24 +0100)
commita8f8d2aeae120e2d7a61025423b447e9a5d27935
treee76d3bdc276ccf0ff783a8e62074863094714459
parent0d136f094849dddc0388d0f1dfd104cdabd4d2ae
cpuidle,menu: smooth out measured_us calculation

The cpuidle state tables contain the maximum exit latency for each
cpuidle state. On x86, that is the exit latency for when the entire
package goes into that same idle state.

However, a lot of the time we only go into the core idle state,
not the package idle state. This means we see a much smaller exit
latency.

We have no way to detect whether we went into the core or package
idle state while idle, and that is ok.

However, the current menu_update logic does have the potential to
trip up the repeating pattern detection in get_typical_interval.
If the system is experiencing an exit latency near the idle state's
exit latency, some of the samples will have exit_us subtracted,
while others will not. This turns a repeating pattern into mush,
potentially breaking get_typical_interval.

Furthermore, for smaller sleep intervals, we know the chance that
all the cores in the package went to the same idle state are fairly
small. Dividing the measured_us by two, instead of subtracting the
full exit latency when hitting a small measured_us, will reduce the
error.

Signed-off-by: Rik van Riel <riel@redhat.com>
Acked-by: Arjan van de Ven <arjan@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/cpuidle/governors/menu.c