[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v2] credit: generalize __vcpu_has_soft_affinity()



>>> On 06.03.15 at 13:00, <george.dunlap@xxxxxxxxxxxxx> wrote:
> On 03/06/2015 11:44 AM, Jan Beulich wrote:
>>>>> On 06.03.15 at 12:32, <george.dunlap@xxxxxxxxxxxxx> wrote:
>>> On 03/06/2015 10:16 AM, Jan Beulich wrote:
>>>>>>> On 06.03.15 at 10:53, <george.dunlap@xxxxxxxxxxxxx> wrote:
>>>>> On 03/06/2015 07:36 AM, Jan Beulich wrote:
>>>>>> As pointed out in the discussion of the patch at
>>>>>> http://lists.xenproject.org/archives/html/xen-devel/2015-02/msg03256.html
>>>>>>  
>>>>>> generalizing the conditions here means code elsewhere doesn't need to
>>>>>> take into consideration internals of how load balancing in the credit
>>>>>> scheduler works.
>>>>>>
>>>>>> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
>>>>>> ---
>>>>>> v2: Use VCPU2ONLINE(vc) (or really an open coded variant thereof)
>>>>>>     instead of cpu_online_map (suggested by Dario).
>>>>>>
>>>>>> --- a/xen/common/sched_credit.c
>>>>>> +++ b/xen/common/sched_credit.c
>>>>>> @@ -292,11 +292,10 @@ __runq_remove(struct csched_vcpu *svc)
>>>>>>  static inline int __vcpu_has_soft_affinity(const struct vcpu *vc,
>>>>>>                                             const cpumask_t *mask)
>>>>>>  {
>>>>>> -    if ( cpumask_full(vc->cpu_soft_affinity)
>>>>>> -         || !cpumask_intersects(vc->cpu_soft_affinity, mask) )
>>>>>> -        return 0;
>>>>>> -
>>>>>> -    return 1;
>>>>>> +    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);
>>>>>
>>>>> It looks like the comment above this line could use changing too; perhaps:
>>>>>
>>>>> ---
>>>>> Hard affinity balancing is always necessary and must never be skipped.
>>>>> But soft affinity need only be considered when it has a functionally
>>>>> different effect than other constraints (such as hard affinity, cpus
>>>>> online, or cpupools).
>>>>>
>>>>> Soft affinity only needs to be considered if:
>>>>> * The cpus in the cpupool are not a subset of soft affinity
>>>>> * The hard affinity is not a subset of soft affinity
>>>>
>>>> "hard" and "soft" appear to be swapped here. I corrected this,
>>>> please let me know if you disagree (in which case the patch would
>>>> need changing too).
>>>
>>> Uum -- I think my comment is right.  If the soft affinity is a subset of
>>> hard affinity, then there are some cpus in the hard affinity which are
>>> "preferred" (soft affine) and some that are "not preferred"
>>> (non-soft-affine).  Whereas, if hard affinity is a subset of soft
>>> affinity, then all cpus in the hard affinity are "preffered" (soft
>>> affine), and so there's no sense in doing the soft affinity step.
>> 
>> I.e. confusion about which affinity means what is ongoing:
>> Earlier on we had Dario answering a question of mine
>> 
>>>> 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".
> 
> Hard affinity replaces what used to be called "vcpu_affinity"; and soft
> affinity is typically used for vNUMA implementation.
> 
> 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.
> 
> 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.

Okay, good - less confusion. I.e. soft affinity is always a subset of
hard affinity (anything in excess is simply ignored). And then I agree
that the current check in the patch makes no sense, i.e. needs its
operands swapped. v3 in the works.

Jan

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.