• Wanpeng Li's avatar
    KVM: X86: Boost queue head vCPU to mitigate lock waiter preemption · 266e85a5
    Wanpeng Li authored
    Commit 11752adb (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: default avatarWanpeng Li <wanpengli@tencent.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    266e85a5
x86.c 259 KB