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.
This commit is contained in:
Andreas Sandberg 2013-06-11 09:43:05 +02:00
parent c97a99110b
commit 64270b19c3
2 changed files with 18 additions and 2 deletions

View file

@ -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().

View file

@ -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;