[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 1/6] xen: credit1: simplify csched_runq_steal() a little bit.
On Fri, 2017-03-03 at 09:35 +0000, anshul makkar wrote: > On 02/03/17 10:38, Dario Faggioli wrote: > > --- a/xen/common/sched_credit.c > > +++ b/xen/common/sched_credit.c > > @@ -1593,64 +1593,65 @@ static struct csched_vcpu * > > csched_runq_steal(int peer_cpu, int cpu, int pri, int > > balance_step) > > { > > const struct csched_pcpu * const peer_pcpu = > > CSCHED_PCPU(peer_cpu); > > - const struct vcpu * const peer_vcpu = curr_on_cpu(peer_cpu); > > struct csched_vcpu *speer; > > struct list_head *iter; > > struct vcpu *vc; > > > > + ASSERT(peer_pcpu != NULL); > > + > > /* > > * Don't steal from an idle CPU's runq because it's about to > > * pick up work from it itself. > > */ > > - if ( peer_pcpu != NULL && !is_idle_vcpu(peer_vcpu) ) > > + if ( unlikely(is_idle_vcpu(curr_on_cpu(peer_cpu))) ) > > + goto out; > We can just use if (!is_idle_vcpu(peer_vcpu)). Why to replace it > with > some code that introduces an unnecessary branch statement. > Mmm... I don't think I understand what this means. > > + /* > > + * If the vcpu has no useful soft affinity, skip this > > vcpu. > > + * 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". > > + * > > + * Notice that, if not even one vCPU on this runq has a > > useful > > + * soft affinity, we could have avoid considering this > > runq for > > + * a soft balancing step in the first place. This, for > > instance, > > + * can be implemented by taking note of on what runq there > > are > > + * vCPUs with useful soft affinities in some sort of > > bitmap > > + * or counter. > > + */ > > Isn't it a better approach that now as we have came across a vcpu > which > doesn't have a desired soft affinity but is a potential candidate > for > migration, so instead of just forgetting it, lets save the > information > for such vcpus in some data structure in some order so that we don't > have to scan them again if we don't find anything useful in the > present run. > So, AFAIUI, you're suggesting something like this: 1. for each vcpu in the runqueue, we check soft-affinity. If it matches, we're done; 2. if it does not match, we check hard-affinity. If it matches, we save that vcpu somewhere. We only need to save one vcpu, the first one that we find to have matching hard-affinity; 3. if we don't find any vcpu with matching soft affinity, we steal the one we've saved. Is this correct? If yes, if there's not anything I'm overlooking, I think it could work. It's a separate patch, of course. I can try putting that together, unless of course you want to give this a go yourself. :-) Thanks and Regards, Dario -- <<This happens because I choose it to happen!>> (Raistlin Majere) ----------------------------------------------------------------- Dario Faggioli, Ph.D, http://about.me/dario.faggioli Senior Software Engineer, Citrix Systems R&D Ltd., Cambridge (UK) Attachment:
signature.asc _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |