Commit 3cc4e148 authored by Jing Zhang's avatar Jing Zhang Committed by Paolo Bonzini

KVM: stats: Add VM stat for remote tlb flush requests

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: default avatarDavid Matlack <dmatlack@google.com>
Signed-off-by: default avatarJing Zhang <jingzhangos@google.com>
Message-Id: <20210817002639.3856694-1-jingzhangos@google.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent fdde13c1
...@@ -80,6 +80,7 @@ static bool memslot_is_logging(struct kvm_memory_slot *memslot) ...@@ -80,6 +80,7 @@ static bool memslot_is_logging(struct kvm_memory_slot *memslot)
*/ */
void kvm_flush_remote_tlbs(struct kvm *kvm) 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); kvm_call_hyp(__kvm_tlb_flush_vmid, &kvm->arch.mmu);
} }
......
...@@ -1444,7 +1444,8 @@ struct _kvm_stats_desc { ...@@ -1444,7 +1444,8 @@ struct _kvm_stats_desc {
KVM_STATS_BASE_POW10, -9, sz) KVM_STATS_BASE_POW10, -9, sz)
#define KVM_GENERIC_VM_STATS() \ #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() \ #define KVM_GENERIC_VCPU_STATS() \
STATS_DESC_COUNTER(VCPU_GENERIC, halt_successful_poll), \ STATS_DESC_COUNTER(VCPU_GENERIC, halt_successful_poll), \
......
...@@ -80,6 +80,7 @@ struct kvm_mmu_memory_cache { ...@@ -80,6 +80,7 @@ struct kvm_mmu_memory_cache {
struct kvm_vm_stat_generic { struct kvm_vm_stat_generic {
u64 remote_tlb_flush; u64 remote_tlb_flush;
u64 remote_tlb_flush_requests;
}; };
struct kvm_vcpu_stat_generic { struct kvm_vcpu_stat_generic {
......
...@@ -318,6 +318,7 @@ void kvm_flush_remote_tlbs(struct kvm *kvm) ...@@ -318,6 +318,7 @@ void kvm_flush_remote_tlbs(struct kvm *kvm)
*/ */
long dirty_count = smp_load_acquire(&kvm->tlbs_dirty); 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 * We want to publish modifications to the page tables before reading
* mode. Pairs with a memory barrier in arch-specific code. * mode. Pairs with a memory barrier in arch-specific code.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment