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:
parent
c97a99110b
commit
64270b19c3
2 changed files with 18 additions and 2 deletions
|
@ -201,6 +201,16 @@ BaseKvmCPU::regStats()
|
||||||
.desc("total number of KVM exits")
|
.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
|
numMMIO
|
||||||
.name(name() + ".numMMIO")
|
.name(name() + ".numMMIO")
|
||||||
.desc("number of VM exits due to memory mapped IO")
|
.desc("number of VM exits due to memory mapped IO")
|
||||||
|
@ -523,10 +533,12 @@ BaseKvmCPU::tick()
|
||||||
|
|
||||||
// Enter into the RunningService state unless the
|
// Enter into the RunningService state unless the
|
||||||
// simulation was stopped by a timer.
|
// simulation was stopped by a timer.
|
||||||
if (_kvmRun->exit_reason != KVM_EXIT_INTR)
|
if (_kvmRun->exit_reason != KVM_EXIT_INTR) {
|
||||||
_status = RunningService;
|
_status = RunningService;
|
||||||
else
|
} else {
|
||||||
|
++numExitSignal;
|
||||||
_status = Running;
|
_status = Running;
|
||||||
|
}
|
||||||
|
|
||||||
if (tryDrain())
|
if (tryDrain())
|
||||||
_status = Idle;
|
_status = Idle;
|
||||||
|
@ -574,6 +586,8 @@ BaseKvmCPU::kvmRun(Tick ticks)
|
||||||
// then immediately exits.
|
// then immediately exits.
|
||||||
DPRINTF(KvmRun, "KVM: Delivering IO without full guest entry\n");
|
DPRINTF(KvmRun, "KVM: Delivering IO without full guest entry\n");
|
||||||
|
|
||||||
|
++numVMHalfEntries;
|
||||||
|
|
||||||
// This signal is always masked while we are executing in gem5
|
// This signal is always masked while we are executing in gem5
|
||||||
// and gets unmasked temporarily as soon as we enter into
|
// and gets unmasked temporarily as soon as we enter into
|
||||||
// KVM. See setSignalMask() and setupSignalHandler().
|
// KVM. See setSignalMask() and setupSignalHandler().
|
||||||
|
|
|
@ -687,6 +687,8 @@ class BaseKvmCPU : public BaseCPU
|
||||||
/* @{ */
|
/* @{ */
|
||||||
Stats::Scalar numInsts;
|
Stats::Scalar numInsts;
|
||||||
Stats::Scalar numVMExits;
|
Stats::Scalar numVMExits;
|
||||||
|
Stats::Scalar numVMHalfEntries;
|
||||||
|
Stats::Scalar numExitSignal;
|
||||||
Stats::Scalar numMMIO;
|
Stats::Scalar numMMIO;
|
||||||
Stats::Scalar numCoalescedMMIO;
|
Stats::Scalar numCoalescedMMIO;
|
||||||
Stats::Scalar numIO;
|
Stats::Scalar numIO;
|
||||||
|
|
Loading…
Reference in a new issue