[OpenWrt-Devel] [PATCH 1/2] mvebu: backport cpuidle improvements

Claudio Leite leitec at staticky.com
Thu Apr 2 09:56:28 EDT 2015


Upstream commits 43b68879de27b1993518687fbc6013da80cdcbfe
and ce6031c89a35cffd5a5992b08377b77f49a004b9 improve the
cpuidle driver on Armada XP. The latter commit improves
performance at the slight expense of power consumption.

Signed-off-by: Claudio Leite <leitec at staticky.com>
---
 ...uidle-mvebu-Fix-the-CPU-PM-notifier-usage.patch | 38 +++++++++++++
 ...bu-Update-cpuidle-thresholds-for-Armada-X.patch | 66 ++++++++++++++++++++++
 2 files changed, 104 insertions(+)
 create mode 100644 target/linux/mvebu/patches-3.18/060-cpuidle-mvebu-Fix-the-CPU-PM-notifier-usage.patch
 create mode 100644 target/linux/mvebu/patches-3.18/061-cpuidle-mvebu-Update-cpuidle-thresholds-for-Armada-X.patch

diff --git a/target/linux/mvebu/patches-3.18/060-cpuidle-mvebu-Fix-the-CPU-PM-notifier-usage.patch b/target/linux/mvebu/patches-3.18/060-cpuidle-mvebu-Fix-the-CPU-PM-notifier-usage.patch
new file mode 100644
index 0000000..afd6617
--- /dev/null
+++ b/target/linux/mvebu/patches-3.18/060-cpuidle-mvebu-Fix-the-CPU-PM-notifier-usage.patch
@@ -0,0 +1,38 @@
+From 43b68879de27b1993518687fbc6013da80cdcbfe Mon Sep 17 00:00:00 2001
+From: Gregory CLEMENT <gregory.clement at free-electrons.com>
+Date: Thu, 26 Feb 2015 18:20:48 +0100
+Subject: [PATCH] cpuidle: mvebu: Fix the CPU PM notifier usage
+
+As stated in kernel/cpu_pm.c, "Platform is responsible for ensuring
+that cpu_pm_enter is not called twice on the same CPU before
+cpu_pm_exit is called.". In the current code in case of failure when
+calling mvebu_v7_cpu_suspend, the function cpu_pm_exit() is never
+called whereas cpu_pm_enter() was called just before.
+
+This patch moves the cpu_pm_exit() in order to balance the
+cpu_pm_enter() calls.
+
+Cc: stable at vger.kernel.org
+Reported-by: Fulvio Benini <fbf at libero.it>
+Signed-off-by: Gregory CLEMENT <gregory.clement at free-electrons.com>
+Signed-off-by: Daniel Lezcano <daniel.lezcano at linaro.org>
+---
+ drivers/cpuidle/cpuidle-mvebu-v7.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/cpuidle/cpuidle-mvebu-v7.c
++++ b/drivers/cpuidle/cpuidle-mvebu-v7.c
+@@ -37,11 +37,11 @@ static int mvebu_v7_enter_idle(struct cp
+ 		deepidle = true;
+ 
+ 	ret = mvebu_v7_cpu_suspend(deepidle);
++	cpu_pm_exit();
++
+ 	if (ret)
+ 		return ret;
+ 
+-	cpu_pm_exit();
+-
+ 	return index;
+ }
+ 
diff --git a/target/linux/mvebu/patches-3.18/061-cpuidle-mvebu-Update-cpuidle-thresholds-for-Armada-X.patch b/target/linux/mvebu/patches-3.18/061-cpuidle-mvebu-Update-cpuidle-thresholds-for-Armada-X.patch
new file mode 100644
index 0000000..bc0f1a6
--- /dev/null
+++ b/target/linux/mvebu/patches-3.18/061-cpuidle-mvebu-Update-cpuidle-thresholds-for-Armada-X.patch
@@ -0,0 +1,66 @@
+From ce6031c89a35cffd5a5992b08377b77f49a004b9 Mon Sep 17 00:00:00 2001
+From: Sebastien Rannou <mxs at sbrk.org>
+Date: Fri, 13 Feb 2015 15:55:03 +0100
+Subject: [PATCH] cpuidle: mvebu: Update cpuidle thresholds for Armada XP SOCs
+
+Originally, the thresholds used in the cpuidle driver for Armada SOCs
+were temporarily chosen, leaving room for improvements.
+
+This commit updates the thresholds for the Armada XP SOCs with values
+that positively impact performances:
+
+                                without patch  with patch   vendor kernel
+ - iperf localhost (gbit/sec)   ~3.7           ~6.4         ~5.4
+ - ioping tmpfs (iops)          ~163k          ~206k        ~179k
+ - ioping tmpfs (mib/s)         ~636           ~805         ~699
+
+The idle power consumption is negatively impacted (proportionally less
+than the performance gain), and we are still performing better than
+the vendor kernel here:
+
+                                without patch   with patch  vendor kernel
+ - power consumption idle (W)   ~2.4            ~3.2        ~4.4
+ - power consumption busy (W)   ~8.6            ~8.3        ~8.6
+
+There is still room for improvement regarding the value of these
+thresholds, they were chosen to mimic the vendor kernel.
+
+This patch only impacts Armada XP SOCs and was tested on Online Labs
+C1 boards. A similar approach can be taken to improve the performances
+of the Armada 370 and Armada 38x SOCs.
+
+Thanks a lot to Thomas Petazzoni, Gregory Clement and Willy Tarreau
+for the discussions and tips around this topic.
+
+Signed-off-by: Sebastien Rannou <mxs at sbrk.org>
+Signed-off-by: Daniel Lezcano <daniel.lezcano at linaro.org>
+Acked-by: Gregory CLEMENT <gregory.clement at free-electrons.com>
+---
+ drivers/cpuidle/cpuidle-mvebu-v7.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+--- a/drivers/cpuidle/cpuidle-mvebu-v7.c
++++ b/drivers/cpuidle/cpuidle-mvebu-v7.c
+@@ -50,18 +50,18 @@ static struct cpuidle_driver armadaxp_id
+ 	.states[0]		= ARM_CPUIDLE_WFI_STATE,
+ 	.states[1]		= {
+ 		.enter			= mvebu_v7_enter_idle,
+-		.exit_latency		= 10,
++		.exit_latency		= 100,
+ 		.power_usage		= 50,
+-		.target_residency	= 100,
++		.target_residency	= 1000,
+ 		.flags			= CPUIDLE_FLAG_TIME_VALID,
+ 		.name			= "MV CPU IDLE",
+ 		.desc			= "CPU power down",
+ 	},
+ 	.states[2]		= {
+ 		.enter			= mvebu_v7_enter_idle,
+-		.exit_latency		= 100,
++		.exit_latency		= 1000,
+ 		.power_usage		= 5,
+-		.target_residency	= 1000,
++		.target_residency	= 10000,
+ 		.flags			= CPUIDLE_FLAG_TIME_VALID |
+ 						MVEBU_V7_FLAG_DEEP_IDLE,
+ 		.name			= "MV CPU DEEP IDLE",
-- 
2.1.4
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list