Re: [PATCH v5 0/2] sched: update the rq->avg_idle when a task is moved to an idle CPU
From: Dietmar Eggemann
Date: Thu Dec 04 2025 - 08:09:31 EST
On 03.12.25 06:30, Huang Shijie wrote:
> In the newidle balance, the rq->idle_stamp may set to a non-zero value
> if it cannot pull any task.
>
> In the wakeup, it will detect the rq->idle_stamp, and updates
> the rq->avg_idle, then ends the CPU idle status by setting rq->idle_stamp
> to zero.
>
> Besides the wakeup, current code does not end the CPU idle status
> when a task is moved to the idle CPU, such as fork/clone, execve,
> or other cases.
Is there a case which is the most important one? (e.g. idle load balancing)?
I still can't see the reason why this code should be changed (was asked
in v4 already).
Do you have a workload on your machine which gives you better scores in
case you set 'rq->idle_stamp = 0' in all those cases?
What is is actual issue in the current code?
Does 'this_rq->avg_idle' get too big so you spend too much useless time
(since pulled_task == 0) in sched_balance_newidle() because the bailout
condition:
sched_balance_newidle()
...
if (!get_rd_overloaded(this_rq->rd) ||
this_rq->avg_idle < sd->max_newidle_lb_cost) {
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
goto out;
doesn't trigger anymore?
[...]