Patch "sched/uclamp: Make cpu_overutilized() use util_fits_cpu()" has been added to the 6.0-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    sched/uclamp: Make cpu_overutilized() use util_fits_cpu()

to the 6.0-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     sched-uclamp-make-cpu_overutilized-use-util_fits_cpu.patch
and it can be found in the queue-6.0 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 0f4475214a64d3eec5fa8d8cdc9db8bdb10705b5
Author: Qais Yousef <qais.yousef@xxxxxxx>
Date:   Thu Aug 4 15:36:06 2022 +0100

    sched/uclamp: Make cpu_overutilized() use util_fits_cpu()
    
    [ Upstream commit c56ab1b3506ba0e7a872509964b100912bde165d ]
    
    So that it is now uclamp aware.
    
    This fixes a major problem of busy tasks capped with UCLAMP_MAX keeping
    the system in overutilized state which disables EAS and leads to wasting
    energy in the long run.
    
    Without this patch running a busy background activity like JIT
    compilation on Pixel 6 causes the system to be in overutilized state
    74.5% of the time.
    
    With this patch this goes down to  9.79%.
    
    It also fixes another problem when long running tasks that have their
    UCLAMP_MIN changed while running such that they need to upmigrate to
    honour the new UCLAMP_MIN value. The upmigration doesn't get triggered
    because overutilized state never gets set in this state, hence misfit
    migration never happens at tick in this case until the task wakes up
    again.
    
    Fixes: af24bde8df202 ("sched/uclamp: Add uclamp support to energy_compute()")
    Signed-off-by: Qais Yousef <qais.yousef@xxxxxxx>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@xxxxxxxxxxxxx>
    Link: https://lore.kernel.org/r/20220804143609.515789-7-qais.yousef@xxxxxxx
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index cb4d47441a41..2e782d79e80f 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -5807,7 +5807,10 @@ static inline void hrtick_update(struct rq *rq)
 #ifdef CONFIG_SMP
 static inline bool cpu_overutilized(int cpu)
 {
-	return !fits_capacity(cpu_util_cfs(cpu), capacity_of(cpu));
+	unsigned long rq_util_min = uclamp_rq_get(cpu_rq(cpu), UCLAMP_MIN);
+	unsigned long rq_util_max = uclamp_rq_get(cpu_rq(cpu), UCLAMP_MAX);
+
+	return !util_fits_cpu(cpu_util_cfs(cpu), rq_util_min, rq_util_max, cpu);
 }
 
 static inline void update_overutilized_status(struct rq *rq)



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux