Messages in this thread | | | Date | Wed, 29 Nov 2023 13:16:30 +0100 | Subject | Re: [PATCH v2] sched/fair: Use all little CPUs for CPU-bound workload | From | Dietmar Eggemann <> |
| |
On 29/11/2023 11:48, Pierre Gondois wrote: > > > On 11/29/23 09:55, Dietmar Eggemann wrote: >> On 24/11/2023 16:33, Pierre Gondois wrote:
[...]
>>> Testing workload ([1]): >>> Spawn 6 CPU-bound tasks. During the first 100ms (step 1), each tasks >>> is affine to a CPU, except for: >>> - one little CPU which is left idle. >>> - one big CPU which has 2 tasks affine. >>> After the 100ms (step 2), remove the cpumask affinity. >>> >>> Before patch: >>> During step 2, the load balancer running from the idle CPU tags sched >>> domains as: >>> - little CPUs: 'group_has_spare'. Indeed, 3 CPU-bound tasks run on a >>> 4 CPUs sched-domain, and the idle CPU provides enough spare >>> capacity. >> >> What is meant by 'idle CPU provides enough spare capacity? I thought the >> task (util_avg ~ 512_ does not fit on the sched group [1,3-5] when we >> consider util_avg/capacity (383) > > Right, I meant that when evaluating the 'group_type', there is enough spare > capacity when summing the utilization of CPUs in the the MC sched domain: > > --- > group_has_capacity() > { > [...] > if ((sgs->group_capacity * 100) > > (sgs->group_util * imbalance_pct)) > return true; > [...] > }
I see. But doesn't group_has_capacity() already return true because of `if (sgs->sum_nr_running < sgs->group_weight)` in this case (3 < 4)?
Maybe you can make this clearer when sending the v3 with the Reviewed-By tags?
> --- > >> >> The calculated imbalance of ~350 is too small for the task-size and >> that's why we need the 'shr_bound(util, env->sd->nr_balance_failed)' to >> let the task load-balance if nr_balance_failed = 2? > > Yes exact, the tasks are too big and cannot fit this imbalance value > (representing the available spare capacity in the little CPUs in this > case). > > 'shr_bound(...)' allows to progressively reduce the size of the tasks and > allow migrations after having tried to balance 'nr_balance_failed' times.
[...]
| |