summaryrefslogtreecommitdiff
path: root/src/cpu/kvm
diff options
context:
space:
mode:
authorAndreas Sandberg <andreas@sandberg.pp.se>2013-05-02 12:03:43 +0200
committerAndreas Sandberg <andreas@sandberg.pp.se>2013-05-02 12:03:43 +0200
commite316e4e5fe836a3cdd522f7181ea1e6421afd416 (patch)
tree60b6007e58256688a34bbad4ec4d69cd805350c3 /src/cpu/kvm
parentfa249461caa431b774b558349b32282477ef6153 (diff)
downloadgem5-e316e4e5fe836a3cdd522f7181ea1e6421afd416.tar.xz
kvm: Add a stat counting number of instructions executed
This changeset adds a 'numInsts' stat to the KVM-based CPU. It also cleans up the variable names in kvmRun to make the distinction between host cycles and estimated simulated cycles clearer. As a bonus feature, it also fixes a warning (unreferenced variable) when compiling in fast mode.
Diffstat (limited to 'src/cpu/kvm')
-rw-r--r--src/cpu/kvm/base.cc20
-rw-r--r--src/cpu/kvm/base.hh1
2 files changed, 14 insertions, 7 deletions
diff --git a/src/cpu/kvm/base.cc b/src/cpu/kvm/base.cc
index 510d6ae25..f087b7b1a 100644
--- a/src/cpu/kvm/base.cc
+++ b/src/cpu/kvm/base.cc
@@ -175,6 +175,11 @@ BaseKvmCPU::regStats()
BaseCPU::regStats();
+ numInsts
+ .name(name() + ".committedInsts")
+ .desc("Number of instructions committed")
+ ;
+
numVMExits
.name(name() + ".numVMExits")
.desc("total number of KVM exits")
@@ -485,8 +490,10 @@ BaseKvmCPU::kvmRun(Tick ticks)
hwCycles.stop();
- uint64_t cyclesExecuted(hwCycles.read() - baseCycles);
- Tick ticksExecuted(runTimer->ticksFromHostCycles(cyclesExecuted));
+ const uint64_t hostCyclesExecuted(hwCycles.read() - baseCycles);
+ const uint64_t simCyclesExecuted(hostCyclesExecuted * hostFactor);
+ const uint64_t instsExecuted(hwInstructions.read() - baseInstrs);
+ const Tick ticksExecuted(runTimer->ticksFromHostCycles(hostCyclesExecuted));
if (ticksExecuted < ticks &&
timerOverflowed &&
@@ -496,14 +503,13 @@ BaseKvmCPU::kvmRun(Tick ticks)
ticks, ticksExecuted);
}
- numCycles += cyclesExecuted * hostFactor;
+ /* Update statistics */
+ numCycles += simCyclesExecuted;;
++numVMExits;
+ numInsts += instsExecuted;
DPRINTF(KvmRun, "KVM: Executed %i instructions in %i cycles (%i ticks, sim cycles: %i).\n",
- hwInstructions.read() - baseInstrs,
- cyclesExecuted,
- ticksExecuted,
- cyclesExecuted * hostFactor);
+ instsExecuted, hostCyclesExecuted, ticksExecuted, simCyclesExecuted);
return ticksExecuted + flushCoalescedMMIO();
}
diff --git a/src/cpu/kvm/base.hh b/src/cpu/kvm/base.hh
index 0554f913e..f46455af6 100644
--- a/src/cpu/kvm/base.hh
+++ b/src/cpu/kvm/base.hh
@@ -510,6 +510,7 @@ class BaseKvmCPU : public BaseCPU
public:
/* @{ */
+ Stats::Scalar numInsts;
Stats::Scalar numVMExits;
Stats::Scalar numMMIO;
Stats::Scalar numCoalescedMMIO;