.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")
// 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;
// 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().
/* @{ */
Stats::Scalar numInsts;
Stats::Scalar numVMExits;
+ Stats::Scalar numVMHalfEntries;
+ Stats::Scalar numExitSignal;
Stats::Scalar numMMIO;
Stats::Scalar numCoalescedMMIO;
Stats::Scalar numIO;