]> git.baikalelectronics.ru Git - kernel.git/commit
KVM: X86: Boost queue head vCPU to mitigate lock waiter preemption
authorWanpeng Li <wanpengli@tencent.com>
Wed, 24 Jul 2019 09:43:13 +0000 (17:43 +0800)
committerPaolo Bonzini <pbonzini@redhat.com>
Wed, 24 Jul 2019 11:56:53 +0000 (13:56 +0200)
commitc001bbd2e925a6b1811018a8c5fcfb6da03dd4ba
tree1c173451c36c301f6e4fcaa9bc400a3314e1037c
parentee7146d3b441b94fb5eedb1f3ef238cd69fd631e
KVM: X86: Boost queue head vCPU to mitigate lock waiter preemption

Commit 4f8eb7c9 (locking/pvqspinlock: Implement hybrid PV queued/unfair locks)
introduces hybrid PV queued/unfair locks
 - queued mode (no starvation)
 - unfair mode (good performance on not heavily contended lock)
The lock waiter goes into the unfair mode especially in VMs with over-commit
vCPUs since increaing over-commitment increase the likehood that the queue
head vCPU may have been preempted and not actively spinning.

However, reschedule queue head vCPU timely to acquire the lock still can get
better performance than just depending on lock stealing in over-subscribe
scenario.

Testing on 80 HT 2 socket Xeon Skylake server, with 80 vCPUs VM 80GB RAM:
ebizzy -M
             vanilla     boosting    improved
 1VM          23520        25040         6%
 2VM           8000        13600        70%
 3VM           3100         5400        74%

The lock holder vCPU yields to the queue head vCPU when unlock, to boost queue
head vCPU which is involuntary preemption or the one which is voluntary halt
due to fail to acquire the lock after a short spin in the guest.

Cc: Waiman Long <longman@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Radim Krčmář <rkrcmar@redhat.com>
Signed-off-by: Wanpeng Li <wanpengli@tencent.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/x86.c