]> www.infradead.org Git - users/willy/xarray.git/commitdiff
KVM: stats: Add halt_wait_ns stats for all architectures
authorJing Zhang <jingzhangos@google.com>
Mon, 2 Aug 2021 16:56:32 +0000 (16:56 +0000)
committerPaolo Bonzini <pbonzini@redhat.com>
Fri, 20 Aug 2021 20:06:33 +0000 (16:06 -0400)
Add simple stats halt_wait_ns to record the time a VCPU has spent on
waiting for all architectures (not just powerpc).

Signed-off-by: Jing Zhang <jingzhangos@google.com>
Message-Id: <20210802165633.1866976-5-jingzhangos@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/powerpc/include/asm/kvm_host.h
arch/powerpc/kvm/book3s.c
arch/powerpc/kvm/book3s_hv.c
arch/powerpc/kvm/booke.c
include/linux/kvm_host.h
include/linux/kvm_types.h
virt/kvm/kvm_main.c

index 9f52f282b1aa494eafa72e2dfd07d633d25e041a..4931d03e5799af523d2ea0139213c4d35259b8f0 100644 (file)
@@ -103,7 +103,6 @@ struct kvm_vcpu_stat {
        u64 emulated_inst_exits;
        u64 dec_exits;
        u64 ext_intr_exits;
-       u64 halt_wait_ns;
        u64 halt_successful_wait;
        u64 dbell_exits;
        u64 gdbell_exits;
index 5cc6e90095b08082114bbf0d24045981fcc99bc3..b785f67723916326874dcc1285e915cf99d4160b 100644 (file)
@@ -69,7 +69,6 @@ const struct _kvm_stats_desc kvm_vcpu_stats_desc[] = {
        STATS_DESC_COUNTER(VCPU, emulated_inst_exits),
        STATS_DESC_COUNTER(VCPU, dec_exits),
        STATS_DESC_COUNTER(VCPU, ext_intr_exits),
-       STATS_DESC_TIME_NSEC(VCPU, halt_wait_ns),
        STATS_DESC_COUNTER(VCPU, halt_successful_wait),
        STATS_DESC_COUNTER(VCPU, dbell_exits),
        STATS_DESC_COUNTER(VCPU, gdbell_exits),
index 1d1fcc290fca4aa53a49a10115911da45b5c19e5..813ca155561ba14805c91c67fddd340111a5bfd1 100644 (file)
@@ -4144,7 +4144,7 @@ out:
 
        /* Attribute wait time */
        if (do_sleep) {
-               vc->runner->stat.halt_wait_ns +=
+               vc->runner->stat.generic.halt_wait_ns +=
                        ktime_to_ns(cur) - ktime_to_ns(start_wait);
                /* Attribute failed poll time */
                if (vc->halt_poll_ns)
index 5ed6c235e059ba1f68c59131768a1062ef152385..977801c83aff83a0b94084f4efaf0f4ac28d9efb 100644 (file)
@@ -67,7 +67,6 @@ const struct _kvm_stats_desc kvm_vcpu_stats_desc[] = {
        STATS_DESC_COUNTER(VCPU, emulated_inst_exits),
        STATS_DESC_COUNTER(VCPU, dec_exits),
        STATS_DESC_COUNTER(VCPU, ext_intr_exits),
-       STATS_DESC_TIME_NSEC(VCPU, halt_wait_ns),
        STATS_DESC_COUNTER(VCPU, halt_successful_wait),
        STATS_DESC_COUNTER(VCPU, dbell_exits),
        STATS_DESC_COUNTER(VCPU, gdbell_exits),
index 09fc0274b1eb60427ba28fe226cd25e25232bd92..58a8ffee265e616ab98c138966d29b84efe270ba 100644 (file)
@@ -1452,7 +1452,8 @@ struct _kvm_stats_desc {
        STATS_DESC_COUNTER(VCPU_GENERIC, halt_poll_invalid),                   \
        STATS_DESC_COUNTER(VCPU_GENERIC, halt_wakeup),                         \
        STATS_DESC_TIME_NSEC(VCPU_GENERIC, halt_poll_success_ns),              \
-       STATS_DESC_TIME_NSEC(VCPU_GENERIC, halt_poll_fail_ns)
+       STATS_DESC_TIME_NSEC(VCPU_GENERIC, halt_poll_fail_ns),                 \
+       STATS_DESC_TIME_NSEC(VCPU_GENERIC, halt_wait_ns)
 
 extern struct dentry *kvm_debugfs_dir;
 
index ed6a985c56807888e63018da0e9189fdd086b3ba..291ef55125b2e3bcd43ce86e796c5c1110144a69 100644 (file)
@@ -87,6 +87,7 @@ struct kvm_vcpu_stat_generic {
        u64 halt_wakeup;
        u64 halt_poll_success_ns;
        u64 halt_poll_fail_ns;
+       u64 halt_wait_ns;
 };
 
 #define KVM_STATS_NAME_SIZE    48
index 8563d9b725af44e4078127a8d87fb618f6e3c05c..e6fc579bb454e6ed94e0644dcbcbbb66fbfc8c9c 100644 (file)
@@ -3241,6 +3241,10 @@ void kvm_vcpu_block(struct kvm_vcpu *vcpu)
        }
        finish_rcuwait(&vcpu->wait);
        cur = ktime_get();
+       if (waited) {
+               vcpu->stat.generic.halt_wait_ns +=
+                       ktime_to_ns(cur) - ktime_to_ns(poll_end);
+       }
 out:
        kvm_arch_vcpu_unblocking(vcpu);
        block_ns = ktime_to_ns(cur) - ktime_to_ns(start);