KVM: x86: add VCPU stat for KVM_REQ_EVENT processing
authorPaolo Bonzini <pbonzini@redhat.com>
Sat, 17 Dec 2016 15:05:19 +0000 (16:05 +0100)
committerRadim Krčmář <rkrcmar@redhat.com>
Mon, 9 Jan 2017 13:47:59 +0000 (14:47 +0100)
This statistic can be useful to estimate the cost of an IRQ injection
scenario, by comparing it with irq_injections.  For example the stat
shows that sti;hlt triggers more KVM_REQ_EVENT than sti;nop.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/include/asm/kvm_host.h
arch/x86/kvm/x86.c

index 0419e114f27b05416568466d066ba82dea43f939..417502cf42b60642ed5102e348f030e855018bfb 100644 (file)
@@ -861,6 +861,7 @@ struct kvm_vcpu_stat {
        u64 hypercalls;
        u64 irq_injections;
        u64 nmi_injections;
+       u64 req_event;
 };
 
 struct x86_instruction_info;
index edff19d1df97836a112b57fd4ab260ac3a8c53f4..b02af6285887f06af51d13480b1d9a931c8871de 100644 (file)
@@ -180,6 +180,7 @@ struct kvm_stats_debugfs_item debugfs_entries[] = {
        { "insn_emulation_fail", VCPU_STAT(insn_emulation_fail) },
        { "irq_injections", VCPU_STAT(irq_injections) },
        { "nmi_injections", VCPU_STAT(nmi_injections) },
+       { "req_event", VCPU_STAT(req_event) },
        { "mmu_shadow_zapped", VM_STAT(mmu_shadow_zapped) },
        { "mmu_pte_write", VM_STAT(mmu_pte_write) },
        { "mmu_pte_updated", VM_STAT(mmu_pte_updated) },
@@ -6756,6 +6757,7 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu)
        }
 
        if (kvm_check_request(KVM_REQ_EVENT, vcpu) || req_int_win) {
+               ++vcpu->stat.req_event;
                kvm_apic_accept_events(vcpu);
                if (vcpu->arch.mp_state == KVM_MP_STATE_INIT_RECEIVED) {
                        r = 1;