On Fri, 5 Feb 2021 at 18:00, Valentin Schneider <valentin.schnei...@arm.com> wrote: > > On 05/02/21 15:31, Vincent Guittot wrote: > > On Thu, 28 Jan 2021 at 19:32, Valentin Schneider > > <valentin.schnei...@arm.com> wrote: > >> > >> During load-balance, groups classified as group_misfit_task are filtered > >> out if they do not pass > >> > >> group_smaller_max_cpu_capacity(<candidate group>, <local group>); > > > > group_smaller_max_cpu_capacity and group_smaller_max_cpu_capacity are > > removed in the next patch. Merge this and the next and directly remove > > them > > > > OK. > > >> @@ -8253,7 +8260,7 @@ check_cpu_capacity(struct rq *rq, struct > >> sched_domain *sd) > >> static inline int check_misfit_status(struct rq *rq, struct sched_domain > >> *sd) > >> { > >> return rq->misfit_task_load && > >> - (rq->cpu_capacity_orig < rq->rd->max_cpu_capacity || > >> + (capacity_greater(rq->rd->max_cpu_capacity, > >> rq->cpu_capacity_orig) || > > > > Why do you add a margin here whereas there was no margin before ? > > > > Comparing capacities without any sort of filter can lead to ping-ponging > tasks around (capacity values very easily fluctuate by +/- 1, if not more).
max_cpu_capacity reflects the max of the cpu_capacity_orig values don't aim to change and can be considered as static values. It would be better to fix this rounding problem (if any) in topology_get_cpu_scale instead of computing a margin every time it's used > I'm guilty of doing two things at once here: replace existing users, and > convert callsites that should be existing users. I can split the conversion > in a separate patch.