Messages in this thread Patch in this message | | | From | Qibo Huang <> | Subject | [PATCH] thermal/governors: Remove integral_cutoff parameter, IPA is more regulated | Date | Thu, 13 Oct 2022 17:07:33 +0800 |
| |
Reason 1: If the integral_cutoff parameter is 0, the current temperature is greater than the control temperature, and err_integral continues to increase. If an abnormal situation occurs suddenly, the err_integral value will become very large. Even if the current temperature is lower than the control temperature, err_integral will always exist, which will cause the IPA to run out of control and cannot return to normal. This is the problem I'm actually having.
Reason 2: The integral_cutoff parameter is difficult to confirm the optimal, and can not bring good results.
Signed-off-by: Qibo Huang <huangqibo.tech@gmail.com> --- drivers/thermal/gov_power_allocator.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/drivers/thermal/gov_power_allocator.c b/drivers/thermal/gov_power_allocator.c index 2bdf8d797e3c..87e87ce71ff3 100644 --- a/drivers/thermal/gov_power_allocator.c +++ b/drivers/thermal/gov_power_allocator.c @@ -221,6 +221,7 @@ static u32 pid_controller(struct thermal_zone_device *tz, s64 p, i, d, power_range; s32 err, max_power_frac; u32 sustainable_power; + s64 i_next; struct power_allocator_params *params = tz->governor_data; max_power_frac = int_to_frac(max_allocatable_power); @@ -241,13 +242,11 @@ static u32 pid_controller(struct thermal_zone_device *tz, */ i = mul_frac(tz->tzp->k_i, params->err_integral); - if (err < int_to_frac(tz->tzp->integral_cutoff)) { - s64 i_next = i + mul_frac(tz->tzp->k_i, err); + i_next = i + mul_frac(tz->tzp->k_i, err); - if (abs(i_next) < max_power_frac) { - i = i_next; - params->err_integral += err; - } + if (abs(i_next) < max_power_frac) { + i = i_next; + params->err_integral += err; } /* -- 2.37.1
| |