diff options
author | Andreas Sandberg <andreas@sandberg.pp.se> | 2013-06-11 09:43:05 +0200 |
---|---|---|
committer | Andreas Sandberg <andreas@sandberg.pp.se> | 2013-06-11 09:43:05 +0200 |
commit | 64270b19c38cd854e0de78636281519a8fefe50b (patch) | |
tree | ab844c5d1d09d504c3f42298a4979764750cce80 | |
parent | c97a99110b8beafcf557636688e81861157a8c1e (diff) | |
download | gem5-64270b19c38cd854e0de78636281519a8fefe50b.tar.xz |
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.
-rw-r--r-- | src/cpu/kvm/base.cc | 18 | ||||
-rw-r--r-- | src/cpu/kvm/base.hh | 2 |
2 files changed, 18 insertions, 2 deletions
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(). diff --git a/src/cpu/kvm/base.hh b/src/cpu/kvm/base.hh index 2e3ee551b..3c299ce4e 100644 --- a/src/cpu/kvm/base.hh +++ b/src/cpu/kvm/base.hh @@ -687,6 +687,8 @@ class BaseKvmCPU : public BaseCPU /* @{ */ Stats::Scalar numInsts; Stats::Scalar numVMExits; + Stats::Scalar numVMHalfEntries; + Stats::Scalar numExitSignal; Stats::Scalar numMMIO; Stats::Scalar numCoalescedMMIO; Stats::Scalar numIO; |