• Michael S. Tsirkin's avatar
    kvm: better MWAIT emulation for guests · 668fffa3
    Michael S. Tsirkin authored
    Guests that are heavy on futexes end up IPI'ing each other a lot. That
    can lead to significant slowdowns and latency increase for those guests
    when running within KVM.
    
    If only a single guest is needed on a host, we have a lot of spare host
    CPU time we can throw at the problem. Modern CPUs implement a feature
    called "MWAIT" which allows guests to wake up sleeping remote CPUs without
    an IPI - thus without an exit - at the expense of never going out of guest
    context.
    
    The decision whether this is something sensible to use should be up to the
    VM admin, so to user space. We can however allow MWAIT execution on systems
    that support it properly hardware wise.
    
    This patch adds a CAP to user space and a KVM cpuid leaf to indicate
    availability of native MWAIT execution. With that enabled, the worst a
    guest can do is waste as many cycles as a "jmp ." would do, so it's not
    a privilege problem.
    
    We consciously do *not* expose the feature in our CPUID bitmap, as most
    people will want to benefit from sleeping vCPUs to allow for over commit.
    Reported-by: default avatar"Gabriel L. Somlo" <gsomlo@gmail.com>
    Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
    [agraf: fix amd, change commit message]
    Signed-off-by: default avatarAlexander Graf <agraf@suse.de>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    668fffa3
svm.c 138 KB