[PATCH v2 18/20] KVM: s390: vsie: Add VSIE shadow stat counters
Christoph Schlameuss <[email protected]>
| Newsgroups | org.kernel.vger.linux-s390,org.kernel.vger.kvm |
|---|---|
| Message-ID | <[email protected]> |
Add new stat counters to VSIE shadowing to be able to verify and monitor the functionality. * vsie_shadow_scb shows the number of allocated SIE control block shadows. Should count upwards between 0 and the max number of active CPUs or configured value. * vsie_shadow_sca shows the number of allocated system control area shadows. Should count upwards between 0 and the max number of active CPUs or configured value. * vsie_shadow_scb_reuse shows the number of reused SIE control block shadows. * vsie_shadow_sca_reuse shows the number of reused system control area shadows. Signed-off-by: Christoph Schlameuss <[email protected]> --- arch/s390/include/asm/kvm_host.h | 4 ++++ arch/s390/kvm/kvm-s390.c | 4 ++++ arch/s390/kvm/vsie.c | 11 +++++++++++ 3 files changed, 19 insertions(+) diff --git a/arch/s390/include/asm/kvm_host.h b/arch/s390/include/asm/kvm_host.h index 932f0437fce5..171472b8d721 100644 --- a/arch/s390/include/asm/kvm_host.h +++ b/arch/s390/include/asm/kvm_host.h @@ -466,6 +466,10 @@ struct kvm_vm_stat { u64 gmap_shadow_r3_entry; u64 gmap_shadow_sg_entry; u64 gmap_shadow_pg_entry; + u64 vsie_shadow_scb; + u64 vsie_shadow_scb_reuse; + u64 vsie_shadow_sca; + u64 vsie_shadow_sca_reuse; }; struct kvm_arch_memory_slot { diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c index 6f458e7b27e3..95eb1494370a 100644 --- a/arch/s390/kvm/kvm-s390.c +++ b/arch/s390/kvm/kvm-s390.c @@ -86,6 +86,10 @@ const struct kvm_stats_desc kvm_vm_stats_desc[] = { STATS_DESC_COUNTER(VM, gmap_shadow_r3_entry), STATS_DESC_COUNTER(VM, gmap_shadow_sg_entry), STATS_DESC_COUNTER(VM, gmap_shadow_pg_entry), + STATS_DESC_COUNTER(VM, vsie_shadow_scb), + STATS_DESC_COUNTER(VM, vsie_shadow_scb_reuse), + STATS_DESC_COUNTER(VM, vsie_shadow_sca), + STATS_DESC_COUNTER(VM, vsie_shadow_sca_reuse), }; const struct kvm_stats_header kvm_vm_stats_header = { diff --git a/arch/s390/kvm/vsie.c b/arch/s390/kvm/vsie.c index 892023dc92d4..8640435c9d5f 100644 --- a/arch/s390/kvm/vsie.c +++ b/arch/s390/kvm/vsie.c @@ -1104,6 +1104,7 @@ static struct vsie_sca *get_vsie_sca(struct kvm_vcpu *vcpu, struct kvm_s390_sie_ kvm->arch.vsie.scas[kvm->arch.vsie.sca_count] = vsie_sca; kvm->arch.vsie.sca_count++; atomic_set(&vsie_sca->ref_count, 1); + kvm->stat.vsie_shadow_sca++; } else { /* reuse previously created vsie_sca allocation for different osca */ vsie_sca = get_reuseable_vsie_sca(kvm); @@ -1126,6 +1127,7 @@ static struct vsie_sca *get_vsie_sca(struct kvm_vcpu *vcpu, struct kvm_s390_sie_ } unpin_sca(kvm, vsie_sca); clear_vsie_sca(vsie_sca); + kvm->stat.vsie_shadow_sca_reuse++; } if (sie_uses_esca(scb_o)) @@ -1983,6 +1985,7 @@ static struct vsie_page *get_vsie_page(struct kvm_vcpu *vcpu, unsigned long addr vsie_page_new = NULL; WRITE_ONCE(kvm->arch.vsie.pages[kvm->arch.vsie.page_count], vsie_page); kvm->arch.vsie.page_count++; + kvm->stat.vsie_shadow_scb++; } else { /* reuse an existing entry that belongs to nobody */ while (true) { @@ -1995,6 +1998,7 @@ static struct vsie_page *get_vsie_page(struct kvm_vcpu *vcpu, unsigned long addr } unpin_scb(kvm, vsie_page); + kvm->stat.vsie_shadow_scb_reuse++; } rc = vsie_page_init(vcpu, vsie_page, addr); @@ -2021,6 +2025,7 @@ static struct vsie_page *get_vsie_page_cpu_nr(struct kvm_vcpu *vcpu, struct vsie gpa_t scb_gpa, u16 cpu_nr) { struct vsie_page *vsie_page, *vsie_page_new = NULL; + bool vsie_page_is_new = true; int rc; vsie_page = vsie_sca->pages[cpu_nr]; @@ -2041,6 +2046,7 @@ static struct vsie_page *get_vsie_page_cpu_nr(struct kvm_vcpu *vcpu, struct vsie } } if (vsie_page != vsie_page_new) { + vsie_page_is_new = false; if (vsie_page_new) free_vsie_page(vsie_page_new); @@ -2058,6 +2064,11 @@ static struct vsie_page *get_vsie_page_cpu_nr(struct kvm_vcpu *vcpu, struct vsie put_vsie_page(vsie_page); return ERR_PTR(rc); } + + if (vsie_page_is_new) + vcpu->kvm->stat.vsie_shadow_scb++; + else + vcpu->kvm->stat.vsie_shadow_scb_reuse++; } return vsie_page; -- 2.55.0