From 64270b19c38cd854e0de78636281519a8fefe50b Mon Sep 17 00:00:00 2001 From: Andreas Sandberg Date: Tue, 11 Jun 2013 09:43:05 +0200 Subject: kvm: Add more VM stats This changeset adds the following stats to KVM: * numVMHalfEntries: Number of entries into KVM to finalize pending IO operations without executing guest instructions. These typically happen as a result of a drain where the guest must finalize some operations before the guest state is consistent. * numExitSignal: Number of VM exits that have been triggered by a signal. These usually happen as a result of the timer that limits the time spent in KVM. --- src/cpu/kvm/base.cc | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'src/cpu/kvm/base.cc') diff --git a/src/cpu/kvm/base.cc b/src/cpu/kvm/base.cc index 539790e52..4c176c18b 100644 --- a/src/cpu/kvm/base.cc +++ b/src/cpu/kvm/base.cc @@ -201,6 +201,16 @@ BaseKvmCPU::regStats() .desc("total number of KVM exits") ; + numVMHalfEntries + .name(name() + ".numVMHalfEntries") + .desc("number of KVM entries to finalize pending operations") + ; + + numExitSignal + .name(name() + ".numExitSignal") + .desc("exits due to signal delivery") + ; + numMMIO .name(name() + ".numMMIO") .desc("number of VM exits due to memory mapped IO") @@ -523,10 +533,12 @@ BaseKvmCPU::tick() // Enter into the RunningService state unless the // simulation was stopped by a timer. - if (_kvmRun->exit_reason != KVM_EXIT_INTR) + if (_kvmRun->exit_reason != KVM_EXIT_INTR) { _status = RunningService; - else + } else { + ++numExitSignal; _status = Running; + } if (tryDrain()) _status = Idle; @@ -574,6 +586,8 @@ BaseKvmCPU::kvmRun(Tick ticks) // then immediately exits. DPRINTF(KvmRun, "KVM: Delivering IO without full guest entry\n"); + ++numVMHalfEntries; + // This signal is always masked while we are executing in gem5 // and gets unmasked temporarily as soon as we enter into // KVM. See setSignalMask() and setupSignalHandler(). -- cgit v1.2.3