kvm: Maintain a local instruction counter and update totalNumInsts

Update the system's totalNumInst counter when exiting from KVM and
maintain an internal absolute instruction count instead of relying on
the one from perf.
This commit is contained in:
Andreas Sandberg
2013-06-11 09:24:40 +02:00
parent 0b4a8b4086
commit df059f45a0
2 changed files with 9 additions and 3 deletions

View File

@@ -80,7 +80,8 @@ BaseKvmCPU::BaseKvmCPU(BaseKvmCPUParams *params)
pageSize(sysconf(_SC_PAGE_SIZE)),
tickEvent(*this),
perfControlledByTimer(params->usePerfOverflow),
hostFactor(params->hostFactor)
hostFactor(params->hostFactor),
ctrInsts(0)
{
if (pageSize == -1)
panic("KVM: Failed to determine host page size (%i)\n",
@@ -416,14 +417,14 @@ BaseKvmCPU::getContext(int tn)
Counter
BaseKvmCPU::totalInsts() const
{
return hwInstructions.read();
return ctrInsts;
}
Counter
BaseKvmCPU::totalOps() const
{
hack_once("Pretending totalOps is equivalent to totalInsts()\n");
return hwInstructions.read();
return ctrInsts;
}
void
@@ -522,6 +523,8 @@ BaseKvmCPU::kvmRun(Tick ticks)
numCycles += simCyclesExecuted;;
++numVMExits;
numInsts += instsExecuted;
ctrInsts += instsExecuted;
system->totalNumInsts += instsExecuted;
DPRINTF(KvmRun, "KVM: Executed %i instructions in %i cycles (%i ticks, sim cycles: %i).\n",
instsExecuted, hostCyclesExecuted, ticksExecuted, simCyclesExecuted);

View File

@@ -561,6 +561,9 @@ class BaseKvmCPU : public BaseCPU
Stats::Scalar numInterrupts;
Stats::Scalar numHypercalls;
/* @} */
/** Number of instructions executed by the CPU */
Counter ctrInsts;
};
#endif