Messages in this thread | | | Date | Fri, 25 Feb 2022 14:46:15 +0800 | Subject | Re: [RFC PATCH 0/5] introduce sched-idle balancing | From | Abel Wu <> |
| |
Hi Peter,
On 2/24/22 11:20 PM, Peter Zijlstra Wrote: > On Thu, Feb 17, 2022 at 11:43:56PM +0800, Abel Wu wrote: >> Current load balancing is mainly based on cpu capacity >> and task util, which makes sense in the POV of overall >> throughput. While there still might be some improvement >> can be done by reducing number of overloaded cfs rqs if >> sched-idle or idle rq exists. > > I'm much confused, there is an explicit new-idle balancer and a periodic > idle balancer already there.
The two balancers are triggered on the rqs that have no tasks on them, and load_balance() seems don't show a preference for non-idle tasks so there might be possibility that only idle tasks are pulled during load balance while overloaded rqs (rq->cfs.h_nr_running > 1) exist. As a result the normal tasks, mostly latency-critical ones in our case, on that overloaded rq still suffer waiting for each other. I observed this through perf sched.
IOW the main difference from the POV of load_balance() between the latency-critical tasks and the idle ones is load.
The sched-idle balancer is triggered on the sched-idle rqs periodically and the newly-idle ones. It does a 'fast' pull of non-idle tasks from the overloaded rqs to the sched-idle/idle ones to let the non-idle tasks make full use of cpu resources.
The sched-idle balancer only focuses on non-idle tasks' performance, so it can introduce overall load imbalance, and that's why I put it before load_balance().
Best Regards, Abel
| |