summaryrefslogtreecommitdiffstats
path: root/include/uapi/linux
diff options
context:
space:
mode:
authorMichael S. Tsirkin <mst@redhat.com>2017-04-21 12:27:17 +0200
committerPaolo Bonzini <pbonzini@redhat.com>2017-04-21 12:50:28 +0200
commit668fffa3f838edfcb1679f842f7ef1afa61c3e9a (patch)
treeedf2ba4b34dfc5f3757d20e94c598829bbb48e77 /include/uapi/linux
parentdb2336a80489e7c3c7728cefd9be58fac5ecfb39 (diff)
downloadlinux-668fffa3f838edfcb1679f842f7ef1afa61c3e9a.tar.gz
linux-668fffa3f838edfcb1679f842f7ef1afa61c3e9a.tar.bz2
linux-668fffa3f838edfcb1679f842f7ef1afa61c3e9a.zip
kvm: better MWAIT emulation for guests
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: "Gabriel L. Somlo" <gsomlo@gmail.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> [agraf: fix amd, change commit message] Signed-off-by: Alexander Graf <agraf@suse.de> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'include/uapi/linux')
-rw-r--r--include/uapi/linux/kvm.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h
index 3c168b6fd74b..e43906b95d9f 100644
--- a/include/uapi/linux/kvm.h
+++ b/include/uapi/linux/kvm.h
@@ -893,6 +893,7 @@ struct kvm_ppc_resize_hpt {
#define KVM_CAP_S390_GS 140
#define KVM_CAP_S390_AIS 141
#define KVM_CAP_SPAPR_TCE_VFIO 142
+#define KVM_CAP_X86_GUEST_MWAIT 143
#ifdef KVM_CAP_IRQ_ROUTING