Messages in this thread | | | Date | Mon, 16 Jul 2012 23:19:12 +0530 | From | Raghavendra K T <> | Subject | Re: [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.
| |