Skip to content
  • Wanpeng Li's avatar
    KVM: X86: use paravirtualized TLB Shootdown · 858a43aa
    Wanpeng Li authored
    
    
    Remote TLB flush does a busy wait which is fine in bare-metal
    scenario. But with-in the guest, the vcpus might have been pre-empted or
    blocked. In this scenario, the initator vcpu would end up busy-waiting
    for a long amount of time; it also consumes CPU unnecessarily to wake
    up the target of the shootdown.
    
    This patch set adds support for KVM's new paravirtualized TLB flush;
    remote TLB flush does not wait for vcpus that are sleeping, instead
    KVM will flush the TLB as soon as the vCPU starts running again.
    
    The improvement is clearly visible when the host is overcommitted; in this
    case, the PV TLB flush (in addition to avoiding the wait on the main CPU)
    prevents preempted vCPUs from stealing precious execution time from the
    running ones.
    
    Testing on a Xeon Gold 6142 2.6GHz 2 sockets, 32 cores, 64 threads,
    so 64 pCPUs, and each VM is 64 vCPUs.
    
    ebizzy -M
                  vanilla    optimized     boost
    1VM            46799       48670         4%
    2VM            23962       42691        78%
    3VM            16152       37539       132%
    
    Cc: Paolo Bonzini <pbonzini@redhat.com>
    Cc: Radim Krčmář <rkrcmar@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Signed-off-by: default avatarWanpeng Li <wanpeng.li@hotmail.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: default avatarRadim Krčmář <rkrcmar@redhat.com>
    858a43aa