arm64: KVM: Yield CPU when vcpu executes a WFE
authorMarc Zyngier <marc.zyngier@arm.com>
Fri, 2 Aug 2013 10:41:13 +0000 (11:41 +0100)
committerMarc Zyngier <marc.zyngier@arm.com>
Tue, 29 Oct 2013 18:25:25 +0000 (18:25 +0000)
commitd241aac798eb042e605f78c31a4122e583b2cd13
tree0b2f77cfbf32cfd1ff8b46a302d4480d9cb5c8ae
parent4a10c2ac2f368583138b774ca41fac4207911983
arm64: KVM: Yield CPU when vcpu executes a WFE

On an (even slightly) oversubscribed system, spinlocks are quickly
becoming a bottleneck, as some vcpus are spinning, waiting for a
lock to be released, while the vcpu holding the lock may not be
running at all.

The solution is to trap blocking WFEs and tell KVM that we're
now spinning. This ensures that other vpus will get a scheduling
boost, allowing the lock to be released more quickly. Also, using
CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT slightly improves the performance
when the VM is severely overcommited.

Acked-by: Christoffer Dall <christoffer.dall@linaro.org>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
arch/arm64/include/asm/kvm_arm.h
arch/arm64/kvm/Kconfig
arch/arm64/kvm/handle_exit.c