[PATCH 0/5] KVM: x86: Fastpath cleanup, fix, and enhancement

Sean Christopherson posted 5 patches 1 year, 4 months ago
arch/x86/include/asm/kvm_host.h |   1 +
arch/x86/kvm/svm/svm.c          |  13 +-
arch/x86/kvm/vmx/vmx.c          |   2 +
arch/x86/kvm/x86.c              | 319 +++++++++++++++++---------------
arch/x86/kvm/x86.h              |   1 +
5 files changed, 188 insertions(+), 148 deletions(-)
[PATCH 0/5] KVM: x86: Fastpath cleanup, fix, and enhancement
Posted by Sean Christopherson 1 year, 4 months ago
This series was prompted by observations of HLT-exiting when debugging
a throughput issue related to posted interrupts.  When KVM is running in
a nested scenario, a rather surprising number of HLT exits occur with an
unmasked interrupt already pending.  I didn't debug too deeply into the
guest side of things, but I suspect what is happening is that it's fairly
easy for L2 to be interrupted (by L1 or L0) between checking if it (the
CPU) should enter an idle state and actually executing STI;HLT.

AFAICT, a non-nested setup doesn't benefit much, if at all.  But, I don't
see any downside to checking for a wake event in the fastpath, e.g. it's
basically a "zero" time halt-polling mechanism.

The other patches fix flaws found by inspection when adding HLT-exiting
to the faspath.

Note, the userspace-exit logic is basically untested, i.e. I probably
need to write a selftest...

Sean Christopherson (5):
  KVM: x86: Re-enter guest if WRMSR(X2APIC_ICR) fastpath is successful
  KVM: x86: Dedup fastpath MSR post-handling logic
  KVM: x86: Exit to userspace if fastpath triggers one on instruction
    skip
  KVM: x86: Reorganize code in x86.c to co-locate vCPU blocking/running
    helpers
  KVM: x86: Add fastpath handling of HLT VM-Exits

 arch/x86/include/asm/kvm_host.h |   1 +
 arch/x86/kvm/svm/svm.c          |  13 +-
 arch/x86/kvm/vmx/vmx.c          |   2 +
 arch/x86/kvm/x86.c              | 319 +++++++++++++++++---------------
 arch/x86/kvm/x86.h              |   1 +
 5 files changed, 188 insertions(+), 148 deletions(-)


base-commit: 332d2c1d713e232e163386c35a3ba0c1b90df83f
-- 
2.46.0.rc2.264.g509ed76dc8-goog
Re: [PATCH 0/5] KVM: x86: Fastpath cleanup, fix, and enhancement
Posted by Sean Christopherson 1 year, 3 months ago
On Fri, 02 Aug 2024 12:51:15 -0700, Sean Christopherson wrote:
> This series was prompted by observations of HLT-exiting when debugging
> a throughput issue related to posted interrupts.  When KVM is running in
> a nested scenario, a rather surprising number of HLT exits occur with an
> unmasked interrupt already pending.  I didn't debug too deeply into the
> guest side of things, but I suspect what is happening is that it's fairly
> easy for L2 to be interrupted (by L1 or L0) between checking if it (the
> CPU) should enter an idle state and actually executing STI;HLT.
> 
> [...]

Applied to kvm-x86 misc, I gave myself enough confidence the fastpath fix is
correct with a selftest update[*] (which I'll get applied next week).

[*] https://lore.kernel.org/all/20240830044448.130449-1-seanjc@google.com

[1/5] KVM: x86: Re-enter guest if WRMSR(X2APIC_ICR) fastpath is successful
      https://github.com/kvm-x86/linux/commit/0dd45f2cd8cc
[2/5] KVM: x86: Dedup fastpath MSR post-handling logic
      https://github.com/kvm-x86/linux/commit/ea60229af7fb
[3/5] KVM: x86: Exit to userspace if fastpath triggers one on instruction skip
      https://github.com/kvm-x86/linux/commit/f7f39c50edb9
[4/5] KVM: x86: Reorganize code in x86.c to co-locate vCPU blocking/running helpers
      https://github.com/kvm-x86/linux/commit/70cdd2385106
[5/5] KVM: x86: Add fastpath handling of HLT VM-Exits
      https://github.com/kvm-x86/linux/commit/1876dd69dfe8

--
https://github.com/kvm-x86/linux/tree/next
Re: [PATCH 0/5] KVM: x86: Fastpath cleanup, fix, and enhancement
Posted by Paolo Bonzini 1 year, 3 months ago
On Sat, Aug 31, 2024 at 2:21 AM Sean Christopherson <seanjc@google.com> wrote:
> Applied to kvm-x86 misc, I gave myself enough confidence the fastpath fix is
> correct with a selftest update[*] (which I'll get applied next week).

Sorry for not reviewing this before vacation; done this belatedly and
patches 1/2 may require another thought (or a revert). Hopefully I'm
wrong.

Paolo


> [*] https://lore.kernel.org/all/20240830044448.130449-1-seanjc@google.com
>
> [1/5] KVM: x86: Re-enter guest if WRMSR(X2APIC_ICR) fastpath is successful
>       https://github.com/kvm-x86/linux/commit/0dd45f2cd8cc
> [2/5] KVM: x86: Dedup fastpath MSR post-handling logic
>       https://github.com/kvm-x86/linux/commit/ea60229af7fb
> [3/5] KVM: x86: Exit to userspace if fastpath triggers one on instruction skip
>       https://github.com/kvm-x86/linux/commit/f7f39c50edb9
> [4/5] KVM: x86: Reorganize code in x86.c to co-locate vCPU blocking/running helpers
>       https://github.com/kvm-x86/linux/commit/70cdd2385106
> [5/5] KVM: x86: Add fastpath handling of HLT VM-Exits
>       https://github.com/kvm-x86/linux/commit/1876dd69dfe8
>
> --
> https://github.com/kvm-x86/linux/tree/next
>