linux-pm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] thermal: Use power efficient workqueue
@ 2018-01-03  9:24 Leo Yan
  2018-01-03  9:43 ` Vincent Guittot
  2018-01-10 19:28 ` Eduardo Valentin
  0 siblings, 2 replies; 3+ messages in thread
From: Leo Yan @ 2018-01-03  9:24 UTC (permalink / raw)
  To: Zhang Rui, Eduardo Valentin, linux-pm, linux-kernel
  Cc: Leo Yan, Daniel Lezcano, Vincent Guittot

Thermal core framework uses the system_freezable_wq workqueue as its
workqueue for polling temperature. Using system_freezable_wq workqueue
prevents the scheduler to make smart decision about the best place to
schedule the work.

This commit replaces system_freezable_wq with
system_freezable_power_efficient_wq. With kernel configuration
CONFIG_WQ_POWER_EFFICIENT is enabled, the work can be scheduled on the
best CPU from a power or a performance point of view.

This commit is inspired by Vincent Guittot patch "netfilter: conntrack:
use power efficient workqueue" and verified on 96boards Hikey960.

Cc: Eduardo Valentin <edubezval@gmail.com>
Cc: Zhang Rui <rui.zhang@intel.com>
Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
Cc: Vincent Guittot <vincent.guittot@linaro.org>
Signed-off-by: Leo Yan <leo.yan@linaro.org>
---
 drivers/thermal/thermal_core.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
index 2b1b0ba..ba90f71 100644
--- a/drivers/thermal/thermal_core.c
+++ b/drivers/thermal/thermal_core.c
@@ -293,11 +293,12 @@ static void thermal_zone_device_set_polling(struct thermal_zone_device *tz,
 					    int delay)
 {
 	if (delay > 1000)
-		mod_delayed_work(system_freezable_wq, &tz->poll_queue,
+		mod_delayed_work(system_freezable_power_efficient_wq,
+				 &tz->poll_queue,
 				 round_jiffies(msecs_to_jiffies(delay)));
 	else if (delay)
-		mod_delayed_work(system_freezable_wq, &tz->poll_queue,
-				 msecs_to_jiffies(delay));
+		mod_delayed_work(system_freezable_power_efficient_wq,
+				 &tz->poll_queue, msecs_to_jiffies(delay));
 	else
 		cancel_delayed_work(&tz->poll_queue);
 }
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] thermal: Use power efficient workqueue
  2018-01-03  9:24 [PATCH] thermal: Use power efficient workqueue Leo Yan
@ 2018-01-03  9:43 ` Vincent Guittot
  2018-01-10 19:28 ` Eduardo Valentin
  1 sibling, 0 replies; 3+ messages in thread
From: Vincent Guittot @ 2018-01-03  9:43 UTC (permalink / raw)
  To: Leo Yan; +Cc: Zhang Rui, Eduardo Valentin, linux-pm, linux-kernel,
	Daniel Lezcano

On 3 January 2018 at 10:24, Leo Yan <leo.yan@linaro.org> wrote:
> Thermal core framework uses the system_freezable_wq workqueue as its
> workqueue for polling temperature. Using system_freezable_wq workqueue
> prevents the scheduler to make smart decision about the best place to
> schedule the work.
>
> This commit replaces system_freezable_wq with
> system_freezable_power_efficient_wq. With kernel configuration
> CONFIG_WQ_POWER_EFFICIENT is enabled, the work can be scheduled on the
> best CPU from a power or a performance point of view.
>
> This commit is inspired by Vincent Guittot patch "netfilter: conntrack:
> use power efficient workqueue" and verified on 96boards Hikey960.
>
> Cc: Eduardo Valentin <edubezval@gmail.com>
> Cc: Zhang Rui <rui.zhang@intel.com>
> Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
> Cc: Vincent Guittot <vincent.guittot@linaro.org>
> Signed-off-by: Leo Yan <leo.yan@linaro.org>

Acked-by: Vincent Guittot <vincent.guittot@linaro.org>

> ---
>  drivers/thermal/thermal_core.c | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
> index 2b1b0ba..ba90f71 100644
> --- a/drivers/thermal/thermal_core.c
> +++ b/drivers/thermal/thermal_core.c
> @@ -293,11 +293,12 @@ static void thermal_zone_device_set_polling(struct thermal_zone_device *tz,
>                                             int delay)
>  {
>         if (delay > 1000)
> -               mod_delayed_work(system_freezable_wq, &tz->poll_queue,
> +               mod_delayed_work(system_freezable_power_efficient_wq,
> +                                &tz->poll_queue,
>                                  round_jiffies(msecs_to_jiffies(delay)));
>         else if (delay)
> -               mod_delayed_work(system_freezable_wq, &tz->poll_queue,
> -                                msecs_to_jiffies(delay));
> +               mod_delayed_work(system_freezable_power_efficient_wq,
> +                                &tz->poll_queue, msecs_to_jiffies(delay));
>         else
>                 cancel_delayed_work(&tz->poll_queue);
>  }
> --
> 2.7.4
>

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] thermal: Use power efficient workqueue
  2018-01-03  9:24 [PATCH] thermal: Use power efficient workqueue Leo Yan
  2018-01-03  9:43 ` Vincent Guittot
@ 2018-01-10 19:28 ` Eduardo Valentin
  1 sibling, 0 replies; 3+ messages in thread
From: Eduardo Valentin @ 2018-01-10 19:28 UTC (permalink / raw)
  To: Leo Yan; +Cc: Zhang Rui, linux-pm, linux-kernel, Daniel Lezcano,
	Vincent Guittot

On Wed, Jan 03, 2018 at 05:24:16PM +0800, Leo Yan wrote:
> Thermal core framework uses the system_freezable_wq workqueue as its
> workqueue for polling temperature. Using system_freezable_wq workqueue
> prevents the scheduler to make smart decision about the best place to
> schedule the work.
> 
> This commit replaces system_freezable_wq with
> system_freezable_power_efficient_wq. With kernel configuration
> CONFIG_WQ_POWER_EFFICIENT is enabled, the work can be scheduled on the
> best CPU from a power or a performance point of view.
> 
> This commit is inspired by Vincent Guittot patch "netfilter: conntrack:
> use power efficient workqueue" and verified on 96boards Hikey960.

The case may not be the same as for netfilter and for thermal.

what is the worst case scheduling delay here?

More importantly, what problem are you really trying to solve?
Do you have a case in which thermal WQs are consuming too much CPUs?
Do you care describing (also in the commit)?

> 
> Cc: Eduardo Valentin <edubezval@gmail.com>
> Cc: Zhang Rui <rui.zhang@intel.com>
> Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
> Cc: Vincent Guittot <vincent.guittot@linaro.org>
> Signed-off-by: Leo Yan <leo.yan@linaro.org>
> ---
>  drivers/thermal/thermal_core.c | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
> index 2b1b0ba..ba90f71 100644
> --- a/drivers/thermal/thermal_core.c
> +++ b/drivers/thermal/thermal_core.c
> @@ -293,11 +293,12 @@ static void thermal_zone_device_set_polling(struct thermal_zone_device *tz,
>  					    int delay)
>  {
>  	if (delay > 1000)
> -		mod_delayed_work(system_freezable_wq, &tz->poll_queue,
> +		mod_delayed_work(system_freezable_power_efficient_wq,
> +				 &tz->poll_queue,
>  				 round_jiffies(msecs_to_jiffies(delay)));
>  	else if (delay)
> -		mod_delayed_work(system_freezable_wq, &tz->poll_queue,
> -				 msecs_to_jiffies(delay));
> +		mod_delayed_work(system_freezable_power_efficient_wq,
> +				 &tz->poll_queue, msecs_to_jiffies(delay));
>  	else
>  		cancel_delayed_work(&tz->poll_queue);
>  }
> -- 
> 2.7.4
> 

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2018-01-10 19:28 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-01-03  9:24 [PATCH] thermal: Use power efficient workqueue Leo Yan
2018-01-03  9:43 ` Vincent Guittot
2018-01-10 19:28 ` Eduardo Valentin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).