|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 1/4] sched: credit2: respect per-vcpu hard affinity
On Tue, 2015-03-31 at 15:37 +0100, George Dunlap wrote:
> On 03/26/2015 09:48 AM, Justin T. Weaver wrote:
> > --- a/xen/common/sched_credit2.c
> > +++ b/xen/common/sched_credit2.c
> > @@ -194,6 +195,12 @@ int opt_overload_balance_tolerance=-3;
> > integer_param("credit2_balance_over", opt_overload_balance_tolerance);
> >
> > /*
> > + * Use this to avoid having too many cpumask_t structs on the stack
> > + */
> > +static cpumask_t **scratch_mask = NULL;
> > +#define csched2_cpumask scratch_mask[smp_processor_id()]
>
> Since I'm asking for changes below: It's not clear to me when I'm
> scanning the code that csched2_cpumask is a scratch variable. What
> about calling the actual variable _scratch_cpumask and havind the
> #define be scratch_cpumask?
>
+1
> > /* Find the runqueue with the lowest instantaneous load */
> > for_each_cpu(i, &prv->active_queues)
> > {
> > struct csched2_runqueue_data *rqd;
> > - s_time_t rqd_avgload;
> > + s_time_t rqd_avgload = MAX_LOAD;
> >
> > rqd = prv->rqd + i;
> >
> > /* If checking a different runqueue, grab the lock,
> > - * read the avg, and then release the lock.
> > + * check hard affinity, read the avg, and then release the lock.
> > *
> > * If on our own runqueue, don't grab or release the lock;
> > * but subtract our own load from the runqueue load to simulate
> > - * impartiality */
> > + * impartiality.
> > + *
> > + * svc's hard affinity may have changed; this function is the
> > + * credit 2 scheduler's first opportunity to react to the change,
> > + * so it is possible here that svc does not have hard affinity
> > + * with any of the pcpus of svc's currently assigned run queue.
> > + */
> > if ( rqd == svc->rqd )
> > {
> > - rqd_avgload = rqd->b_avgload - svc->avgload;
> > + if ( cpumask_intersects(vc->cpu_hard_affinity, &rqd->active) )
> > + rqd_avgload = rqd->b_avgload - svc->avgload;
> > }
> > else if ( spin_trylock(&rqd->lock) )
> > {
> > - rqd_avgload = rqd->b_avgload;
> > + if ( cpumask_intersects(vc->cpu_hard_affinity, &rqd->active) )
> > + rqd_avgload = rqd->b_avgload;
> > +
> > spin_unlock(&rqd->lock);
> > }
> > else
>
> Since we're already potentially falling through and doing the comparison
> below with an unchanged rqd_avgload (which has now been set to MAX_LOAD
> above), I wonder if it makes more sense to remove this "else continue"
> here, just to avoid confusing people.
>
Agreed! It was me that suggested Justing how to reorg this block of code
during v2's review... my bad not spotting that the 'else / continue' was
useless then! :-P
Regards,
Dario
Attachment:
signature.asc _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |