lkml.org 
[lkml]   [2012]   [Jul]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH RFC V4 3/3] kvm: Choose better candidate for directed yield
On 07/16/2012 03:37 PM, Avi Kivity wrote:
> On 07/16/2012 11:25 AM, Raghavendra K T wrote:
>> From: Raghavendra K T<raghavendra.kt@linux.vnet.ibm.com>
>>
>> Currently, on a large vcpu guests, there is a high probability of
>> yielding to the same vcpu who had recently done a pause-loop exit or
>> cpu relax intercepted. Such a yield can lead to the vcpu spinning
>> again and hence degrade the performance.
>>
>> The patchset keeps track of the pause loop exit/cpu relax interception
>> and gives chance to a vcpu which:
>> (a) Has not done pause loop exit or cpu relax intercepted at all
>> (probably he is preempted lock-holder)
>> (b) Was skipped in last iteration because it did pause loop exit or
>> cpu relax intercepted, and probably has become eligible now
>> (next eligible lock holder)
>>
>
>>
>> +#ifdef CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT
>> +/*
>> + * Helper that checks whether a VCPU is eligible for directed yield.
>> + * Most eligible candidate to yield is decided by following heuristics:
>> + *
>> + * (a) VCPU which has not done pl-exit or cpu relax intercepted recently
>> + * (preempted lock holder), indicated by @cpu_relax_intercepted.
>> + * Set at the beiginning and cleared at the end of interception/PLE handler.
>> + *
>> + * (b) VCPU which has done pl-exit/ cpu relax intercepted but did not get
>> + * chance last time (mostly it has become eligible now since we have probably
>> + * yielded to lockholder in last iteration. This is done by toggling
>> + * @dy_eligible each time a VCPU checked for eligibility.)
>> + *
>> + * Yielding to a recently pl-exited/cpu relax intercepted VCPU before yielding
>> + * to preempted lock-holder could result in wrong VCPU selection and CPU
>> + * burning. Giving priority for a potential lock-holder increases lock
>> + * progress.
>> + */
>> +bool kvm_vcpu_check_and_update_eligible(struct kvm_vcpu *vcpu)
>
> Predicates' names should give a hint as to what true and false returns
> mean. For example vcpu_eligible_for_directed_yield().
>

I agree regarding the Predicate name. My confusion was it was
doing more than that (flipping eligible flag).
So, I ll go with kvm_vcpu_eligible_for_directed_yield()

>> +{
[...]
>> + return eligible;
>> +}
>
> You're accessing another vcpu's data structures without any locking.
> This is probably okay since we're not basing any life or death decisions
> on this, but a comment would be good to explain to readers that this has
> been considered and is okay (and why).
>
>

True and agree. What we doing here is not worth of locking overhead.
will try to explain more on that.



\
 
 \ /
  Last update: 2012-07-16 20:21    [from the cache]
©2003-2011 Jasper Spaans