KVM: stats: Add VM stat for remote tlb flush requests
authorJing Zhang <jingzhangos@google.com>
Tue, 17 Aug 2021 00:26:39 +0000 (00:26 +0000)
committerPaolo Bonzini <pbonzini@redhat.com>
Mon, 6 Sep 2021 10:30:45 +0000 (06:30 -0400)
Add a new stat that counts the number of times a remote TLB flush is
requested, regardless of whether it kicks vCPUs out of guest mode. This
allows us to look at how often flushes are initiated.

Unlike remote_tlb_flush, this one applies to ARM's instruction-set-based
TLB flush implementation, so apply it there too.

Original-by: David Matlack <dmatlack@google.com>
Signed-off-by: Jing Zhang <jingzhangos@google.com>
Message-Id: <20210817002639.3856694-1-jingzhangos@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/arm64/kvm/mmu.c
include/linux/kvm_host.h
include/linux/kvm_types.h
virt/kvm/kvm_main.c

index 0625bf2..f5bb235 100644 (file)
@@ -80,6 +80,7 @@ static bool memslot_is_logging(struct kvm_memory_slot *memslot)
  */
 void kvm_flush_remote_tlbs(struct kvm *kvm)
 {
+       ++kvm->stat.generic.remote_tlb_flush_requests;
        kvm_call_hyp(__kvm_tlb_flush_vmid, &kvm->arch.mmu);
 }
 
index e4d712e..c177789 100644 (file)
@@ -1444,7 +1444,8 @@ struct _kvm_stats_desc {
                KVM_STATS_BASE_POW10, -9, sz)
 
 #define KVM_GENERIC_VM_STATS()                                                \
-       STATS_DESC_COUNTER(VM_GENERIC, remote_tlb_flush)
+       STATS_DESC_COUNTER(VM_GENERIC, remote_tlb_flush),                      \
+       STATS_DESC_COUNTER(VM_GENERIC, remote_tlb_flush_requests)
 
 #define KVM_GENERIC_VCPU_STATS()                                              \
        STATS_DESC_COUNTER(VCPU_GENERIC, halt_successful_poll),                \
index de7fb5f..2237abb 100644 (file)
@@ -80,6 +80,7 @@ struct kvm_mmu_memory_cache {
 
 struct kvm_vm_stat_generic {
        u64 remote_tlb_flush;
+       u64 remote_tlb_flush_requests;
 };
 
 struct kvm_vcpu_stat_generic {
index 140c7d3..3059563 100644 (file)
@@ -318,6 +318,7 @@ void kvm_flush_remote_tlbs(struct kvm *kvm)
         */
        long dirty_count = smp_load_acquire(&kvm->tlbs_dirty);
 
+       ++kvm->stat.generic.remote_tlb_flush_requests;
        /*
         * We want to publish modifications to the page tables before reading
         * mode. Pairs with a memory barrier in arch-specific code.