[V2] thermal: power_allocator: Avoid overwriting PID coefficients from setup time

Message ID 20240125062331.28943-1-di.shen@unisoc.com
State New
Headers
Series [V2] thermal: power_allocator: Avoid overwriting PID coefficients from setup time |

Commit Message

Di Shen Jan. 25, 2024, 6:23 a.m. UTC
  When the PID coefficients k_* are set via sysfs before the IPA
algorithm is triggered then the coefficients would be overwritten after
IPA throttle() is called. The old configuration values might be
different than the new values estimated by the IPA internal algorithm.

There might be a time delay when this overwriting happens. It
depends on the thermal zone temperature value. The temperature value
needs to cross the first trip point value then IPA algorithms start
operating. Although, the PID coefficients setup time should not be
affected or linked to any later operating phase and values must not be
overwritten.

This patch initializes params->sustainable_power when the governor
binds to thermal zone to avoid overwriting k_*. The basic function won't
be affected, as the k_* still can be estimated if the sustainable_power
is modified.

Signed-off-by: Di Shen <di.shen@unisoc.com>
---
 drivers/thermal/gov_power_allocator.c | 2 ++
 1 file changed, 2 insertions(+)
  

Comments

Di Shen Feb. 4, 2024, 2:55 a.m. UTC | #1
Hi Lukasz,

On Thu, Jan 25, 2024 at 2:24 PM Di Shen <di.shen@unisoc.com> wrote:
>
> When the PID coefficients k_* are set via sysfs before the IPA
> algorithm is triggered then the coefficients would be overwritten after
> IPA throttle() is called. The old configuration values might be
> different than the new values estimated by the IPA internal algorithm.
>
> There might be a time delay when this overwriting happens. It
> depends on the thermal zone temperature value. The temperature value
> needs to cross the first trip point value then IPA algorithms start
> operating. Although, the PID coefficients setup time should not be
> affected or linked to any later operating phase and values must not be
> overwritten.
>
> This patch initializes params->sustainable_power when the governor
> binds to thermal zone to avoid overwriting k_*. The basic function won't
> be affected, as the k_* still can be estimated if the sustainable_power
> is modified.
>
> Signed-off-by: Di Shen <di.shen@unisoc.com>
> ---
>  drivers/thermal/gov_power_allocator.c | 2 ++
>  1 file changed, 2 insertions(+)
>
> diff --git a/drivers/thermal/gov_power_allocator.c b/drivers/thermal/gov_power_allocator.c
> index 81e061f183ad..1b17dc4c219c 100644
> --- a/drivers/thermal/gov_power_allocator.c
> +++ b/drivers/thermal/gov_power_allocator.c
> @@ -711,6 +711,8 @@ static int power_allocator_bind(struct thermal_zone_device *tz)
>
>         if (!tz->tzp->sustainable_power)
>                 dev_warn(&tz->device, "power_allocator: sustainable_power will be estimated\n");
> +       else
> +               params->sustainable_power = tz->tzp->sustainable_power;
>
>         estimate_pid_constants(tz, tz->tzp->sustainable_power,
>                                params->trip_switch_on,
> --
> 2.17.1
>

Any comments on patchv2?
Looking forward to hearing from you. Thanks!

Best regards,
Di
  
Lukasz Luba Feb. 6, 2024, 12:15 p.m. UTC | #2
Hi Di,

On 2/4/24 02:55, Di Shen wrote:
> Hi Lukasz,
> 
> On Thu, Jan 25, 2024 at 2:24 PM Di Shen <di.shen@unisoc.com> wrote:
>>
>> When the PID coefficients k_* are set via sysfs before the IPA
>> algorithm is triggered then the coefficients would be overwritten after
>> IPA throttle() is called. The old configuration values might be
>> different than the new values estimated by the IPA internal algorithm.
>>
>> There might be a time delay when this overwriting happens. It
>> depends on the thermal zone temperature value. The temperature value
>> needs to cross the first trip point value then IPA algorithms start
>> operating. Although, the PID coefficients setup time should not be
>> affected or linked to any later operating phase and values must not be
>> overwritten.
>>
>> This patch initializes params->sustainable_power when the governor
>> binds to thermal zone to avoid overwriting k_*. The basic function won't
>> be affected, as the k_* still can be estimated if the sustainable_power
>> is modified.
>>
>> Signed-off-by: Di Shen <di.shen@unisoc.com>
>> ---
>>   drivers/thermal/gov_power_allocator.c | 2 ++
>>   1 file changed, 2 insertions(+)
>>
>> diff --git a/drivers/thermal/gov_power_allocator.c b/drivers/thermal/gov_power_allocator.c
>> index 81e061f183ad..1b17dc4c219c 100644
>> --- a/drivers/thermal/gov_power_allocator.c
>> +++ b/drivers/thermal/gov_power_allocator.c
>> @@ -711,6 +711,8 @@ static int power_allocator_bind(struct thermal_zone_device *tz)
>>
>>          if (!tz->tzp->sustainable_power)
>>                  dev_warn(&tz->device, "power_allocator: sustainable_power will be estimated\n");
>> +       else
>> +               params->sustainable_power = tz->tzp->sustainable_power;
>>
>>          estimate_pid_constants(tz, tz->tzp->sustainable_power,
>>                                 params->trip_switch_on,
>> --
>> 2.17.1
>>
> 
> Any comments on patchv2?
> Looking forward to hearing from you. Thanks!

My apologies I was out-of-office.

That v2 patch looks good. Although, please resend it as a new
message, not as a response to the v1. In that way it's easier to
pick it up by maintainers. You can use a tag:
[RESEND][PATCH v2] .....

You can add
Reviewed-by: Lukasz Luba <lukasz.luba@arm.com>

Regards,
Lukasz
  

Patch

diff --git a/drivers/thermal/gov_power_allocator.c b/drivers/thermal/gov_power_allocator.c
index 81e061f183ad..1b17dc4c219c 100644
--- a/drivers/thermal/gov_power_allocator.c
+++ b/drivers/thermal/gov_power_allocator.c
@@ -711,6 +711,8 @@  static int power_allocator_bind(struct thermal_zone_device *tz)
 
 	if (!tz->tzp->sustainable_power)
 		dev_warn(&tz->device, "power_allocator: sustainable_power will be estimated\n");
+	else
+		params->sustainable_power = tz->tzp->sustainable_power;
 
 	estimate_pid_constants(tz, tz->tzp->sustainable_power,
 			       params->trip_switch_on,