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: 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>
This commit is contained in:
parent
fdde13c13f
commit
3cc4e148b9
@ -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 {
|
|||||||
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 {
|
|||||||
|
|
||||||
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)
|
|||||||
*/
|
*/
|
||||||
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.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user