On Thu, 3 Dec 2020 at 18:52, Mel Gorman <mgor...@techsingularity.net> wrote: > > On Thu, Dec 03, 2020 at 05:38:03PM +0100, Vincent Guittot wrote: > > On Thu, 3 Dec 2020 at 15:11, Mel Gorman <mgor...@techsingularity.net> wrote: > > > > > > The target CPU is definitely not idle in both select_idle_core and > > > select_idle_cpu. For select_idle_core(), the SMT is potentially > > > checked unnecessarily as the core is definitely not idle if the > > > target is busy. For select_idle_cpu(), the first CPU checked is > > > simply a waste. > > > > > > > > Signed-off-by: Mel Gorman <mgor...@techsingularity.net> > > > --- > > > kernel/sched/fair.c | 2 ++ > > > 1 file changed, 2 insertions(+) > > > > > > diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c > > > index 68dd9cd62fbd..1d8f5c4b4936 100644 > > > --- a/kernel/sched/fair.c > > > +++ b/kernel/sched/fair.c > > > @@ -6077,6 +6077,7 @@ static int select_idle_core(struct task_struct *p, > > > struct sched_domain *sd, int > > > return -1; > > > > > > cpumask_and(cpus, sched_domain_span(sd), p->cpus_ptr); > > > + __cpumask_clear_cpu(target, cpus); > > > > should clear cpu_smt_mask(target) as we are sure that the core will not be > > idle > > > > The intent was that the sibling might still be an idle candidate. In > the current draft of the series, I do not even clear this so that the > SMT sibling is considered as an idle candidate. The reasoning is that if > there are no idle cores then an SMT sibling of the target is as good an > idle CPU to select as any.
Isn't the purpose of select_idle_smt ? select_idle_core() looks for an idle core and opportunistically saves an idle CPU candidate to skip select_idle_cpu. In this case this is useless loops for select_idle_core() because we are sure that the core is not idle > > -- > Mel Gorman > SUSE Labs