1. 16 Jan, 2018 4 commits
    • Wanpeng Li's avatar
      KVM: X86: support paravirtualized help for TLB shootdowns · f38a7b75
      Wanpeng Li authored
      When running on a virtual machine, IPIs are expensive when the target
      CPU is sleeping.  Thus, it is nice to be able to avoid them for TLB
      shootdowns.  KVM can just do the flush via INVVPID on the guest's behalf
      the next time the CPU is scheduled.
      
      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>
      [Use "&" to test the bit instead of "==". - Paolo]
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      Signed-off-by: default avatarRadim Krčmář <rkrcmar@redhat.com>
      f38a7b75
    • Wanpeng Li's avatar
      KVM: X86: introduce invalidate_gpa argument to tlb flush · c2ba05cc
      Wanpeng Li authored
      Introduce a new bool invalidate_gpa argument to kvm_x86_ops->tlb_flush,
      it will be used by later patches to just flush guest tlb.
      
      For VMX, this will use INVVPID instead of INVEPT, which will invalidate
      combined mappings while keeping guest-physical mappings.
      
      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>
      c2ba05cc
    • 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
    • Wanpeng Li's avatar
      KVM: X86: Add KVM_VCPU_PREEMPTED · fa55eedd
      Wanpeng Li authored
      The next patch will add another bit to the preempted field in
      kvm_steal_time.  Define a constant for bit 0 (the only one that is
      currently used).
      
      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>
      fa55eedd
  2. 14 Dec, 2017 36 commits