Message ID | 1584009568-14089-1-git-send-email-suravee.suthikulpanit@amd.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | kvm: svm: Introduce GA Log tracepoint for AVIC | expand |
On 12/03/20 11:39, Suravee Suthikulpanit wrote: > GA Log tracepoint is useful when debugging AVIC performance > issue as it can be used with perf to count the number of times > IOMMU AVIC injects interrupts through the slow-path instead of > directly inject interrupts to the target vcpu. > > Signed-off-by: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com> > --- > arch/x86/kvm/svm.c | 1 + > arch/x86/kvm/trace.h | 18 ++++++++++++++++++ > arch/x86/kvm/x86.c | 1 + > 3 files changed, 20 insertions(+) > > diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c > index 24c0b2b..504f2cb 100644 > --- a/arch/x86/kvm/svm.c > +++ b/arch/x86/kvm/svm.c > @@ -1208,6 +1208,7 @@ static int avic_ga_log_notifier(u32 ga_tag) > u32 vcpu_id = AVIC_GATAG_TO_VCPUID(ga_tag); > > pr_debug("SVM: %s: vm_id=%#x, vcpu_id=%#x\n", __func__, vm_id, vcpu_id); > + trace_kvm_avic_ga_log(vm_id, vcpu_id); > > spin_lock_irqsave(&svm_vm_data_hash_lock, flags); > hash_for_each_possible(svm_vm_data_hash, kvm_svm, hnode, vm_id) { > diff --git a/arch/x86/kvm/trace.h b/arch/x86/kvm/trace.h > index f194dd0..023de6c 100644 > --- a/arch/x86/kvm/trace.h > +++ b/arch/x86/kvm/trace.h > @@ -1367,6 +1367,24 @@ > __entry->vec) > ); > > +TRACE_EVENT(kvm_avic_ga_log, > + TP_PROTO(u32 vmid, u32 vcpuid), > + TP_ARGS(vmid, vcpuid), > + > + TP_STRUCT__entry( > + __field(u32, vmid) > + __field(u32, vcpuid) > + ), > + > + TP_fast_assign( > + __entry->vmid = vmid; > + __entry->vcpuid = vcpuid; > + ), > + > + TP_printk("vmid=%u, vcpuid=%u", > + __entry->vmid, __entry->vcpuid) > +); > + > TRACE_EVENT(kvm_hv_timer_state, > TP_PROTO(unsigned int vcpu_id, unsigned int hv_timer_in_use), > TP_ARGS(vcpu_id, hv_timer_in_use), > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c > index 5de2006..ef38b82 100644 > --- a/arch/x86/kvm/x86.c > +++ b/arch/x86/kvm/x86.c > @@ -10514,4 +10514,5 @@ u64 kvm_spec_ctrl_valid_bits(struct kvm_vcpu *vcpu) > EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_pi_irte_update); > EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_avic_unaccelerated_access); > EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_avic_incomplete_ipi); > +EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_avic_ga_log); > EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_apicv_update_request); > Queued, thanks. Paolo
diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c index 24c0b2b..504f2cb 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c @@ -1208,6 +1208,7 @@ static int avic_ga_log_notifier(u32 ga_tag) u32 vcpu_id = AVIC_GATAG_TO_VCPUID(ga_tag); pr_debug("SVM: %s: vm_id=%#x, vcpu_id=%#x\n", __func__, vm_id, vcpu_id); + trace_kvm_avic_ga_log(vm_id, vcpu_id); spin_lock_irqsave(&svm_vm_data_hash_lock, flags); hash_for_each_possible(svm_vm_data_hash, kvm_svm, hnode, vm_id) { diff --git a/arch/x86/kvm/trace.h b/arch/x86/kvm/trace.h index f194dd0..023de6c 100644 --- a/arch/x86/kvm/trace.h +++ b/arch/x86/kvm/trace.h @@ -1367,6 +1367,24 @@ __entry->vec) ); +TRACE_EVENT(kvm_avic_ga_log, + TP_PROTO(u32 vmid, u32 vcpuid), + TP_ARGS(vmid, vcpuid), + + TP_STRUCT__entry( + __field(u32, vmid) + __field(u32, vcpuid) + ), + + TP_fast_assign( + __entry->vmid = vmid; + __entry->vcpuid = vcpuid; + ), + + TP_printk("vmid=%u, vcpuid=%u", + __entry->vmid, __entry->vcpuid) +); + TRACE_EVENT(kvm_hv_timer_state, TP_PROTO(unsigned int vcpu_id, unsigned int hv_timer_in_use), TP_ARGS(vcpu_id, hv_timer_in_use), diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 5de2006..ef38b82 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -10514,4 +10514,5 @@ u64 kvm_spec_ctrl_valid_bits(struct kvm_vcpu *vcpu) EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_pi_irte_update); EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_avic_unaccelerated_access); EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_avic_incomplete_ipi); +EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_avic_ga_log); EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_apicv_update_request);
GA Log tracepoint is useful when debugging AVIC performance issue as it can be used with perf to count the number of times IOMMU AVIC injects interrupts through the slow-path instead of directly inject interrupts to the target vcpu. Signed-off-by: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com> --- arch/x86/kvm/svm.c | 1 + arch/x86/kvm/trace.h | 18 ++++++++++++++++++ arch/x86/kvm/x86.c | 1 + 3 files changed, 20 insertions(+)