[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 2/7] xen: credit: (micro) optimize csched_runq_steal().
On Fri, Apr 7, 2017 at 5:56 PM, Dario Faggioli <dario.faggioli@xxxxxxxxxx> wrote: > Chacking whether or not a vCPU can be 'stolen' "Checking" -- I'll fix this one on check-in. :-) > from a peer pCPU's runqueue is relatively cheap. > > Therefore, let's do that as early as possible, > avoiding potentially useless complex checks, and > cpumask manipulations. > > Signed-off-by: Dario Faggioli <dario.faggioli@xxxxxxxxxx> Reviewed-by: George Dunlap <george.dunlap@xxxxxxxxxx> > --- > Cc: George Dunlap <george.dunlap@xxxxxxxxxxxxx> > Cc: Anshul Makkar <anshul.makkar@xxxxxxxxxx> > --- > Changes from v2: > * add an assert enforcing the old !is_running check inside the > is_migrateable() function. > > Changes from v1: > * fixed a typo in a comment. > --- > xen/common/sched_credit.c | 22 ++++++++++++++-------- > 1 file changed, 14 insertions(+), 8 deletions(-) > > diff --git a/xen/common/sched_credit.c b/xen/common/sched_credit.c > index 63a8675..59ed4ca 100644 > --- a/xen/common/sched_credit.c > +++ b/xen/common/sched_credit.c > @@ -708,12 +708,15 @@ static inline int > __csched_vcpu_is_migrateable(struct vcpu *vc, int dest_cpu, cpumask_t *mask) > { > /* > - * Don't pick up work that's in the peer's scheduling tail or hot on > - * peer PCPU. Only pick up work that prefers and/or is allowed to run > - * on our CPU. > + * Don't pick up work that's hot on peer PCPU, or that can't (or > + * would prefer not to) run on cpu. > + * > + * The caller is supposed to have already checked that vc is also > + * not running. > */ > - return !vc->is_running && > - !__csched_vcpu_is_cache_hot(vc) && > + ASSERT(!vc->is_running); > + > + return !__csched_vcpu_is_cache_hot(vc) && > cpumask_test_cpu(dest_cpu, mask); > } > > @@ -1622,7 +1625,9 @@ csched_runq_steal(int peer_cpu, int cpu, int pri, int > balance_step) > BUG_ON( is_idle_vcpu(vc) ); > > /* > - * If the vcpu has no useful soft affinity, skip this vcpu. > + * If the vcpu is still in peer_cpu's scheduling tail, or if it > + * has no useful soft affinity, skip it. > + * > * In fact, what we want is to check if we have any "soft-affine > * work" to steal, before starting to look at "hard-affine work". > * > @@ -1633,8 +1638,9 @@ csched_runq_steal(int peer_cpu, int cpu, int pri, int > balance_step) > * vCPUs with useful soft affinities in some sort of bitmap > * or counter. > */ > - if ( balance_step == CSCHED_BALANCE_SOFT_AFFINITY > - && !__vcpu_has_soft_affinity(vc, vc->cpu_hard_affinity) ) > + if ( vc->is_running || > + (balance_step == CSCHED_BALANCE_SOFT_AFFINITY > + && !__vcpu_has_soft_affinity(vc, vc->cpu_hard_affinity)) ) > continue; > > csched_balance_cpumask(vc, balance_step, cpumask_scratch); > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@xxxxxxxxxxxxx > https://lists.xen.org/xen-devel _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |