Re: [PATCH] thermal: power_allocate: add upper and lower limits

Lukasz Luba
2020-10-06T14:40:28Z

Hi Michael,

On 8/25/20 10:29 AM, Michael Kao wrote:
> On Wed, 2020-04-29 at 21:24 +0100, Lukasz Luba wrote:
>>
>> On 4/29/20 11:39 AM, Michael Kao wrote:
>>> On Fri, 2020-04-24 at 10:22 +0100, Lukasz Luba wrote:
>>>> Hi Michael,
>>>>
>>>> On 4/24/20 8:16 AM, Michael Kao wrote:
>>>>> The upper and lower limits of thermal throttle state in the
>>>>> device tree do not apply to the power_allocate governor.
>>>>> Add the upper and lower limits to the power_allocate governor.
>>>>>
>>>>> Signed-off-by: Michael Kao <michael.kao@mediatek.com>
>>>>> ---
>>>>> drivers/thermal/thermal_core.c | 2 +-
>>>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>>>
>>>>> diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
>>>>> index 9a321dc548c8..f6feed2265bd 100644
>>>>> --- a/drivers/thermal/thermal_core.c
>>>>> +++ b/drivers/thermal/thermal_core.c
>>>>> @@ -598,7 +598,7 @@ int power_actor_set_power(struct thermal_cooling_device *cdev,
>>>>> if (ret)
>>>>> return ret;
>>>>>
>>>>> - instance->target = state;
>>>>> + instance->target = clamp_val(state, instance->lower, instance->upper);
>>>>> mutex_lock(&cdev->lock);
>>>>> cdev->updated = false;
>>>>> mutex_unlock(&cdev->lock);
>>>>>
>>>>
>>>> Thank you for the patch and having to look at it. I have some concerns
>>>> with this approach. Let's analyze it further.
>>>>
>>>> In default the cooling devices in the thermal zone which is used by IPA
>>>> do not have this 'lower' and 'upper' limits. They are set to
>>>> THERMAL_NO_LIMIT in DT to give full control to IPA over the states.
>>>>
>>>> This the function 'power_actor_set_power' actually translates granted
>>>> power to the state that device will run for the next period.
>>>> The IPA algorithm has already split the power budget.
>>>> Now what happen when the 'lower' value will change the state to a state
>>>> which consumes more power than was calculated in the IPA alg... It will
>>>> became unstable.
>>>>
>>>> I would rather see a change which uses these 'lower' and 'upper' limits
>>>> before the IPA do the calculation of the power budget. But this wasn't
>>>> a requirement and we assumed that IPA has full control over the cooling
>>>> device (which I described above with this DT THERMAL_NO_LIMIT).
>>>>
>>>> Is there a problem with your platform that it has to provide some
>>>> minimal performance, so you tried to introduce this clamping?
>>>>
>>>> Regards,
>>>> Lukasz
>>>
>>>
>>> Hi Lukasz,
>>>
>>> I refer to the documentation settings of the thermal device tree
>>> (Documentation / devicetree / bindings / thermal / thermal.txt).
>>>
>>> It shows that cooling-device is a mandatory property, so max/min cooling
>>> state should be able to support in framework point of view.
>>> Otherwise, the limitation should be added in binding document.
>>>
>>> Different hardware mechanisms have different heat dissipation
>>> capabilities.
>>> Limiting the input heat source can slow down the heat accumulation and
>>> temperature burst.
>>> We want to reduce the accumulation of heat at high temperature by
>>> limiting the minimum gear of thermal throttle.
>>
>> I agree that these 'lower' and 'upper' limits shouldn't be just
>> ignored as is currently. This patch clamps the value at late stage,
>> though.
>>
>> Let me have a look how it could be taken into account in the early
>> stage, before the power calculation and split are done. Maybe there
>> is a clean way to inject this.
>>
>> Regards,
>> Lukasz
> Hi Lukasz,
>
> After the research, do you have any ideas or suggestions?
>
> Best Regards,
> Michael
>

My apologies for the delay. I have done some experiments.
Could you resend the patch, please make sure it is not encoded in base64
like this one.

I am going to take your patch together with some other changes.