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    [W:0.052 / U:1.052 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site