> Cc: Peter Zijlstra <[email protected]> > Cc: Ingo Molnar <[email protected]> > Cc: [email protected] (open list) > Signed-off-by: Vincent Guittot <[email protected]> > diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h > index 4a2e8ca..b1715b8 100644 > --- a/kernel/sched/sched.h > +++ b/kernel/sched/sched.h > @@ -1758,9 +1758,6 @@ unsigned long arch_scale_freq_capacity(int cpu) > static __always_inline > unsigned long arch_scale_cpu_capacity(struct sched_domain *sd, int cpu) > { > - if (sd && (sd->flags & SD_SHARE_CPUCAPACITY) && (sd->span_weight > 1)) > - return sd->smt_gain / sd->span_weight; > - > return SCHED_CAPACITY_SCALE;
Without this change, the capacity_orig of an SMT would have been based on the number of threads. For example on SMT2, capacity_orig would have been 589 and for SMT 8, capacity_orig would have been 148. However after this change, capacity_orig of each SMT thread would be 1024. For example SMT 8 core capacity_orig would now be 8192. smt_gain was suppose to make a multi threaded core was slightly more powerful than a single threaded core. I suspect if that sometimes hurt us when doing load balance between 2 cores i.e at MC or DIE sched domain. Even with 2 threads running on a core, the core might look lightly loaded 2048/8192. Hence might dissuade movement to a idle core. I always wonder why arch_scale_cpu_capacity() is called with NULL sched_domain, in scale_rt_capacity(). This way capacity might actually be more than the capacity_orig. I am always under an impression that capacity_orig > capacity. Or am I misunderstanding that? -- Thanks and Regards Srikar Dronamraju

