Patch "sched/pelt: Use rq_clock_task() for hw_pressure" has been added to the 6.10-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/pelt: Use rq_clock_task() for hw_pressure

to the 6.10-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-pelt-use-rq_clock_task-for-hw_pressure.patch
and it can be found in the queue-6.10 subdirectory.

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



commit 6020e1bb0bf44b98631fcf826626fc2c22fb64fe
Author: Chen Yu <yu.c.chen@xxxxxxxxx>
Date:   Tue Aug 27 19:26:07 2024 +0800

    sched/pelt: Use rq_clock_task() for hw_pressure
    
    [ Upstream commit 84d265281d6cea65353fc24146280e0d86ac50cb ]
    
    commit 97450eb90965 ("sched/pelt: Remove shift of thermal clock")
    removed the decay_shift for hw_pressure. This commit uses the
    sched_clock_task() in sched_tick() while it replaces the
    sched_clock_task() with rq_clock_pelt() in __update_blocked_others().
    This could bring inconsistence. One possible scenario I can think of
    is in ___update_load_sum():
    
      u64 delta = now - sa->last_update_time
    
    'now' could be calculated by rq_clock_pelt() from
    __update_blocked_others(), and last_update_time was calculated by
    rq_clock_task() previously from sched_tick(). Usually the former
    chases after the latter, it cause a very large 'delta' and brings
    unexpected behavior.
    
    Fixes: 97450eb90965 ("sched/pelt: Remove shift of thermal clock")
    Signed-off-by: Chen Yu <yu.c.chen@xxxxxxxxx>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@xxxxxxxxxxxxx>
    Reviewed-by: Hongyan Xia <hongyan.xia2@xxxxxxx>
    Reviewed-by: Vincent Guittot <vincent.guittot@xxxxxxxxxx>
    Link: https://lkml.kernel.org/r/20240827112607.181206-1-yu.c.chen@xxxxxxxxx
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 3c59f2b34a779..5e4162d02afc1 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -9365,9 +9365,10 @@ static bool __update_blocked_others(struct rq *rq, bool *done)
 
 	hw_pressure = arch_scale_hw_pressure(cpu_of(rq));
 
+	/* hw_pressure doesn't care about invariance */
 	decayed = update_rt_rq_load_avg(now, rq, curr_class == &rt_sched_class) |
 		  update_dl_rq_load_avg(now, rq, curr_class == &dl_sched_class) |
-		  update_hw_load_avg(now, rq, hw_pressure) |
+		  update_hw_load_avg(rq_clock_task(rq), rq, hw_pressure) |
 		  update_irq_load_avg(rq, 0);
 
 	if (others_have_blocked(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