lkml.org 
[lkml]   [2022]   [Mar]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [PATCH] KVM: x86: optimize PKU branching in kvm_load_{guest|host}_xsave_state
    Date


    > On Mar 27, 2022, at 6:43 AM, Paolo Bonzini <pbonzini@redhat.com> wrote:
    >
    > On 3/26/22 02:37, Jon Kohler wrote:
    >>>> Flip the ordering of the || condition so that XFEATURE_MASK_PKRU is
    >>>> checked first, which when instrumented in our environment appeared
    >>>> to be always true and less overall work than kvm_read_cr4_bits.
    >>>
    >>> If it's always true, then it should be checked last, not first. And if
    >> Sean thanks for the review. This would be a left handed || short circuit, so
    >> wouldn’t we want always true to be first?
    >
    > Yes.

    Ack, thanks.

    >
    >>> Not that it really matters, since static_cpu_has() will patch out all the branches,
    >>> and in practice who cares about a JMP or NOP(s)? But...
    >> The reason I’ve been pursuing this is that the guest+host xsave adds up to
    >> a bit over ~1% as measured by perf top in an exit heavy workload. This is
    >> the first in a few patch we’ve drummed up to to get it back towards zero.
    >> I’ll send the rest out next week.
    >
    > Can you add a testcase to x86/vmexit.c in kvm-unit-tests, too?

    Sure, I’ll check that out and see what I can do.

    Here’s a preview of the larger issue: we’re seeing a regression on SKX/CLX
    hosts when supporting live migration from these older hosts to ICX hosts
    in the same logical compute cluster. Our control plane automatically masks
    features to the lowest common denominator. In such cases, MPX is masked
    away from the guests on the older systems, causing the xsave state that
    the guests sees to be different than the host. When that happens, on each
    load guest or load host state, we spend quite a bit amount of time on
    xsetbv. This happens any time the host and guest don’t match. This is
    Even more expensive when the guest sees PKU, as we spend time on
    xsetbv for MPX not matching and spend time on all the rdpkru/wrpkru stuff.

    Turns out, the xsave bringup code only checks running features, as we
    see the same behavior if we compile out PKU too, so the patches we’ve
    created add a knob for MPX in disabled-features and add the ability for
    that early code to respect the disabled features mask. That way its easy
    to make the host and guest match without doing BIOS level things.

    In between those patches and this one, these two code paths are pretty
    cheap now. I’ll make sure to copy the list when those patches go out, and
    have a detailed cover letter for the issue.

    >
    > Thanks,
    >
    > Paolo
    >

    \
     
     \ /
      Last update: 2022-03-28 02:57    [W:4.969 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site