|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2] credit: generalize __vcpu_has_soft_affinity()
On Fri, 2015-03-06 at 12:00 +0000, George Dunlap wrote:
> >> On 03/06/2015 10:16 AM, Jan Beulich wrote:
> >>> Hmm, not sure. And I keep being confused whether soft means
> >>> "allow" and hard means "prefer" or the other way around.
> >>>
> >> "hard" means allow (or not allow)
> >> "soft" means prefer
> >
> > while I read your reply to mean the opposite.
>
> No, Dario and I mean the same thing: "Hard affinity" means "May only run
> on these cpus and no others". "Soft affinity" means "I prefer you to
> run here if you can, but if it's too busy, go ahead and run it somewhere
> else".
>
Yep.
> Consider the following example
>
> Soft affinity: 00001100
> Hard affinity: 00111100
>
> In this case, the scheduler should *prefer* to run it on cpus 4 or 5
> (which is in both the soft and hard affinities), but *may* run it on
> cpus 2-3 if it thinks it's necessary; so there is an "effective soft
> affinity" -- even though soft affinity is a subset of hard affinity.
>
Exactly.
So, in this case:
cpumask_subset(vc->cpu_soft_affinity, vc->cpu_hard_affinity) = 1
And, as far as this check only is concerned, __vcpu_has_soft_affinity()
should return 'true'.
> Now consider the reverse:
>
> Soft affinity: 00111100
> Hard affinity: 00001100
>
> In this case, the scheduler *must* run it on either cpus 4 or 5; but
> there is no preference between the two, since both are in the soft
> affinity set. So this is effectively the same as not having any soft
> affinity. And hard affinity is a subset of soft affinity.
>
Correct again. So, here:
cpumask_subset(vc->cpu_soft_affinity, vc->cpu_hard_affinity) = 0
And __vcpu_has_soft_affinity() should (modulo the other parts) return
'false'.
Which means that, yes, this part of the condition must loose the '!', or
have the arguments of the call to cpumask_subset() switched. I
personally prefer the former:
return !cpumask_subset(cpupool_online_cpumask(vc->domain->cpupool),
vc->cpu_soft_affinity) &&
cpumask_subset(vc->cpu_soft_affinity, vc->cpu_hard_affinity) &&
cpumask_intersects(vc->cpu_soft_affinity, mask);
At which point it may make sense to turn everything into 'affermative'
logic. It at least look easier to read here:
return cpumask_subset(vc->cpu_soft_affinity,
cpupool_online_cpumask(vc->domain->cpupool) &&
cpumask_subset(vc->cpu_soft_affinity, vc->cpu_hard_affinity) &&
cpumask_intersects(vc->cpu_soft_affinity, mask);
IAC, sorry for overlooking this, I was focusing more on the very first
item of the conditional expression, and managed to miss this. :-(
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 |