Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1261935

[PATCH 3/3] cpuidle,menu: smooth out measured_us calculation

From riel@redhat.com
Newsgroups linux.kernel
Subject [PATCH 3/3] cpuidle,menu: smooth out measured_us calculation
Date 2015-11-03 23:40 +0100
Message-ID <qqSpc-nO-21@gated-at.bofh.it> (permalink)
References <qqSpc-nO-5@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


From: Rik van Riel <riel@redhat.com>

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>
---
 drivers/cpuidle/governors/menu.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/cpuidle/governors/menu.c b/drivers/cpuidle/governors/menu.c
index b1a55731f921..7b0971d97cc3 100644
--- a/drivers/cpuidle/governors/menu.c
+++ b/drivers/cpuidle/governors/menu.c
@@ -404,8 +404,10 @@ static void menu_update(struct cpuidle_driver *drv, struct cpuidle_device *dev)
 	measured_us = cpuidle_get_last_residency(dev);
 
 	/* Deduct exit latency */
-	if (measured_us > target->exit_latency)
+	if (measured_us > 2 * target->exit_latency)
 		measured_us -= target->exit_latency;
+	else
+		measured_us /= 2;
 
 	/* Make sure our coefficients do not exceed unity */
 	if (measured_us > data->next_timer_us)
-- 
2.1.0

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH 0/3] cpuidle: small improvements & fixes for menu governor (resend) riel@redhat.com - 2015-11-03 23:40 +0100
  [PATCH 3/3] cpuidle,menu: smooth out measured_us calculation riel@redhat.com - 2015-11-03 23:40 +0100
    Re: [PATCH 3/3] cpuidle,menu: smooth out measured_us calculation Arjan van de Ven <arjan@linux.intel.com> - 2015-11-04 17:10 +0100
  [PATCH 2/3] cpuidle,menu: use interactivity_req to disable polling riel@redhat.com - 2015-11-03 23:40 +0100
    Re: [PATCH 2/3] cpuidle,menu: use interactivity_req to disable  polling Arjan van de Ven <arjan@linux.intel.com> - 2015-11-04 17:10 +0100
  Re: [PATCH 0/3] cpuidle: small improvements & fixes for menu governor (resend) "Rafael J. Wysocki" <rjw@rjwysocki.net> - 2015-11-05 23:10 +0100
    Re: [PATCH 0/3] cpuidle: small improvements & fixes for menu governor  (resend) Rik van Riel <riel@redhat.com> - 2015-11-06 03:30 +0100

csiph-web