Messages in this thread | | | Date | Tue, 14 Apr 2020 12:40:32 +0100 | From | Qais Yousef <> | Subject | Re: [PATCH 2/4] sched/deadline: Improve admission control for asymmetric CPU capacities |
| |
On 04/09/20 19:29, Dietmar Eggemann wrote:
[...]
> Maybe we can do a hybrid. We have rd->span and rd->sum_cpu_capacity and > with the help of an extra per-cpu cpumask we could just > > DEFINE_PER_CPU(cpumask_var_t, dl_bw_mask); > > dl_bw_cpus(int i) { > > struct cpumask *cpus = this_cpu_cpumask_var_ptr(dl_bw_mask); > ... > cpumask_and(cpus, rd->span, cpu_active_mask); > > return cpumask_weight(cpus); > } > > and > > dl_bw_capacity(int i) { > > struct cpumask *cpus = this_cpu_cpumask_var_ptr(dl_bw_mask); > ... > cpumask_and(cpus, rd->span, cpu_active_mask); > if (cpumask_equal(cpus, rd->span)) > return rd->sum_cpu_capacity; > > for_each_cpu(i, cpus) > cap += capacity_orig_of(i); > > return cap; > } > > So only in cases in which rd->span and cpu_active_mask differ we would > have to sum up again.
I haven't followed this discussion closely, so I could be missing something here.
In sched_cpu_dying() we call set_rq_offline() which clears the cpu in rq->rd->online.
So the way I read the code
rd->online = cpumask_and(rd->span, cpu_active_mask)
But I could have easily missed some detail.
Regardless, it seems to me that DL is working around something not right in the definition of rd->span or using the wrong variable.
My 2p :-). I have to go back and read the discussion in more detail.
Thanks
-- Qais Yousef
| |