Thread (1 message) 1 message, 1 author, 2017-06-08

Re: [PATCH RFC 1/2] thermal/cpu idle cooling: Introduce cpu idle cooling driver

From: Vincent Guittot <vincent.guittot@linaro.org>
Date: 2017-06-08 13:42:58
Also in: lkml

On 8 June 2017 at 14:59, Jean Wangtao [off-list ref] wrote:
Hi Vincent,

2017年6月8日 下午3:19,"Vincent Guittot" [off-list ref]写道:

Hi Kevin,

On 5 June 2017 at 11:07, Tao Wang [off-list ref] wrote:
quoted
cpu idle cooling driver performs synchronized idle injection across
all cpu in same cluster, offers a new method to cooling down cpu,
that is similar to intel_power_clamp driver, but is basically
designed for ARM platform.
Each cluster has its own idle cooling device, each core has its own
idle injection thread, idle injection thread use play_idle to enter
idle. In order to reach deepest idle state, all cores are aligned by
jiffies. the injected idle ratio can be controlled through cooling
device interface.

Signed-off-by: Tao Wang <redacted>
---
 drivers/thermal/Kconfig            |   13 +
 drivers/thermal/Makefile           |    3 +
 drivers/thermal/cpu_idle_cooling.c |  648
++++++++++++++++++++++++++++++++++++
 3 files changed, 664 insertions(+)
 create mode 100644 drivers/thermal/cpu_idle_cooling.c
diff --git a/drivers/thermal/Kconfig b/drivers/thermal/Kconfig
index b5b5fac..f78e85c 100644
--- a/drivers/thermal/Kconfig
+++ b/drivers/thermal/Kconfig
@@ -154,6 +154,19 @@ config CPU_THERMAL

          If you want this support, you should say Y here.

+config CPU_IDLE_THERMAL
+       tristate "generic cpu idle cooling support"
+       depends on CPU_FREQ
Does CPU_IDLE_THERMAL really depend on CPU_FREQ ?


because I use a interface of cpufreq to get cpu idle time and current wall
time, that cause the dependency
IMO, you should better use directly get_cpu_idle_time_us and remove
your dependency with cpufreq
Furthermore, get_cpu_idle_time from cpufreq may consider iowait as
busy time which could make sense for cpufreq but not really for idle
injection

This dependency should be put for CPU_THERMAL_COMBO in the patch 2


CPU_THERMAL_COMBO depend on CPU_THERMAL and CPU_IDLE_THERMAL, but the code
of patch 2 have no direct relationship with cpufreq, so I didn't add the
dependency
yes you're right, CPU_THERMAL_COMBO depends already on CPUFREQ
quoted
+       help
+         This implements the generic cpu cooling mechanism through idle
+         injection.
+
+         This will throttle cpu by injecting specified idle time in
+         a fixed cycle. All cpu in same cluster will enter idle
synchronously
+         to reach deepest idle state when injecting idle.
+
+         If you want this support, you should say Y here.
+
 config CLOCK_THERMAL
        bool "Generic clock cooling support"
        depends on COMMON_CLK
diff --git a/drivers/thermal/Makefile b/drivers/thermal/Makefile
index 094d703..a4db66e 100644
--- a/drivers/thermal/Makefile
+++ b/drivers/thermal/Makefile
@@ -26,6 +26,9 @@ thermal_sys-$(CONFIG_CLOCK_THERMAL)   += clock_cooling.o
 # devfreq cooling
 thermal_sys-$(CONFIG_DEVFREQ_THERMAL) += devfreq_cooling.o

+# cpu idle cooling
+obj-$(CONFIG_CPU_IDLE_THERMAL) += cpu_idle_cooling.o
+
 # platform thermal drivers
 obj-y                          += broadcom/
 obj-$(CONFIG_QCOM_SPMI_TEMP_ALARM)     += qcom-spmi-temp-alarm.o
diff --git a/drivers/thermal/cpu_idle_cooling.c
b/drivers/thermal/cpu_idle_cooling.c
new file mode 100644
index 0000000..89a15c5
--- /dev/null
[snip]
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help