2020-09-23 20:18:41

by Sean Christopherson

[permalink] [raw]
Subject: [PATCH v2 0/7] KVM: x86: Tracepoint improvements and fixes

Various improvements and fixes for the kvm_entry, kvm_exit and
kvm_nested_vmexit tracepoints.

1. Capture the guest's RIP during kvm_entry for obvious reasons.

2. Extend kvm_exit to report the same info as kvm_nested_vmexit, and
macrofy its definition to reuse it verbatim for nested exits.

3. Stop passing in params to kvm_nested_vmexit, and instead use the
same approach (and now code) as kvm_exit where the tracepoint uses a
dedicated kvm_x86_ops hook to retrieve the info.

4. Stop reading GUEST_RIP, EXIT_QUAL, INTR_INFO, and ERROR_CODE on
every VM-Exit from L2 (some of this comes in #3). This saves ~100
cycles (150+ with retpolines) on VM-Exits from L2 that are handled
by L0, e.g. hardware interrupts.

As noted by Vitaly, these changes break trace-cmd[*]. I hereby pinky
swear that, if this series is merged, I will send patches to update
trace-cmd.

[*] git://git.kernel.org/pub/scm/utils/trace-cmd/trace-cmd.git

v2:
- Fixed some goofs in the changelogs.
- Rebased to kvm/queue, commit e1ba1a15af73 ("KVM: SVM: Enable INVPCID
feature on AMD").

Sean Christopherson (7):
KVM: x86: Add RIP to the kvm_entry, i.e. VM-Enter, tracepoint
KVM: x86: Read guest RIP from within the kvm_nested_vmexit tracepoint
KVM: VMX: Add a helper to test for a valid error code given an intr
info
KVM: x86: Add intr/vectoring info and error code to kvm_exit
tracepoint
KVM: x86: Add macro wrapper for defining kvm_exit tracepoint
KVM: x86: Use common definition for kvm_nested_vmexit tracepoint
KVM: nVMX: Read EXIT_QUAL and INTR_INFO only when needed for nested
exit

arch/x86/include/asm/kvm_host.h | 7 ++-
arch/x86/kvm/svm/svm.c | 16 ++---
arch/x86/kvm/trace.h | 107 +++++++++++++-------------------
arch/x86/kvm/vmx/nested.c | 14 ++---
arch/x86/kvm/vmx/vmcs.h | 7 +++
arch/x86/kvm/vmx/vmx.c | 18 +++++-
arch/x86/kvm/x86.c | 2 +-
7 files changed, 86 insertions(+), 85 deletions(-)

--
2.28.0


2020-09-25 21:49:51

by Paolo Bonzini

[permalink] [raw]
Subject: Re: [PATCH v2 0/7] KVM: x86: Tracepoint improvements and fixes

On 23/09/20 22:13, Sean Christopherson wrote:
> As noted by Vitaly, these changes break trace-cmd[*]. I hereby pinky
> swear that, if this series is merged, I will send patches to update
> trace-cmd.
>
> [*] git://git.kernel.org/pub/scm/utils/trace-cmd/trace-cmd.git

Actually I think we should just retire the kvm plugin of libtraceevent.
I do use the plugin myself, but really only because it's enabled by
default. There's very little that the plugin does better than the
tracepoints and could not be fixed in Linux.

The role in particular is printed better by the plugin, some fields are
missing in KVM_MMU_PAGE_PRINTK(). The only real functionality would be
the disassembling of emulated instructions.

Paolo

> v2:
> - Fixed some goofs in the changelogs.
> - Rebased to kvm/queue, commit e1ba1a15af73 ("KVM: SVM: Enable INVPCID
> feature on AMD").
>
> Sean Christopherson (7):
> KVM: x86: Add RIP to the kvm_entry, i.e. VM-Enter, tracepoint
> KVM: x86: Read guest RIP from within the kvm_nested_vmexit tracepoint
> KVM: VMX: Add a helper to test for a valid error code given an intr
> info
> KVM: x86: Add intr/vectoring info and error code to kvm_exit
> tracepoint
> KVM: x86: Add macro wrapper for defining kvm_exit tracepoint
> KVM: x86: Use common definition for kvm_nested_vmexit tracepoint
> KVM: nVMX: Read EXIT_QUAL and INTR_INFO only when needed for nested
> exit
>
> arch/x86/include/asm/kvm_host.h | 7 ++-
> arch/x86/kvm/svm/svm.c | 16 ++---
> arch/x86/kvm/trace.h | 107 +++++++++++++-------------------
> arch/x86/kvm/vmx/nested.c | 14 ++---
> arch/x86/kvm/vmx/vmcs.h | 7 +++
> arch/x86/kvm/vmx/vmx.c | 18 +++++-
> arch/x86/kvm/x86.c | 2 +-
> 7 files changed, 86 insertions(+), 85 deletions(-)
>

Nice. Queued, thanks.

Paolo