kvm: Separate host frequency from simulated CPU frequency
We used to use the KVM CPU's clock to specify the host frequency. This was not ideal for several reasons. One of them being that the clock parameter of a CPU determines the frequency of some of the components connected to the CPU. This changeset adds a separate hostFreq parameter that should be used to specify the host frequency until we add code to autodetect it. The hostFactor should still be used to specify the conversion factor between the host performance and that of the simulated system.
This commit is contained in:
parent
4f002930bc
commit
c97a99110b
3 changed files with 10 additions and 4 deletions
|
@ -71,4 +71,6 @@ class BaseKvmCPU(BaseCPU):
|
|||
kvmVM = Param.KvmVM(Parent.any, 'KVM VM (i.e., shared memory domain)')
|
||||
useCoalescedMMIO = Param.Bool(False, "Use coalesced MMIO (EXPERIMENTAL)")
|
||||
usePerfOverflow = Param.Bool(False, "Use perf event overflow counters (EXPERIMENTAL)")
|
||||
|
||||
hostFreq = Param.Clock("2GHz", "Host clock frequency")
|
||||
hostFactor = Param.Float(1.0, "Cycle scale factor")
|
||||
|
|
|
@ -83,6 +83,7 @@ BaseKvmCPU::BaseKvmCPU(BaseKvmCPUParams *params)
|
|||
pageSize(sysconf(_SC_PAGE_SIZE)),
|
||||
tickEvent(*this),
|
||||
perfControlledByTimer(params->usePerfOverflow),
|
||||
hostFreq(params->hostFreq),
|
||||
hostFactor(params->hostFactor),
|
||||
drainManager(NULL),
|
||||
ctrInsts(0)
|
||||
|
@ -103,11 +104,11 @@ BaseKvmCPU::BaseKvmCPU(BaseKvmCPUParams *params)
|
|||
runTimer.reset(new PerfKvmTimer(hwCycles,
|
||||
KVM_TIMER_SIGNAL,
|
||||
params->hostFactor,
|
||||
params->clock));
|
||||
params->hostFreq));
|
||||
else
|
||||
runTimer.reset(new PosixKvmTimer(KVM_TIMER_SIGNAL, CLOCK_MONOTONIC,
|
||||
params->hostFactor,
|
||||
params->clock));
|
||||
params->hostFreq));
|
||||
}
|
||||
|
||||
BaseKvmCPU::~BaseKvmCPU()
|
||||
|
@ -410,8 +411,7 @@ BaseKvmCPU::activateContext(ThreadID thread_num, Cycles delay)
|
|||
assert(_status == Idle);
|
||||
assert(!tickEvent.scheduled());
|
||||
|
||||
numCycles += ticksToCycles(thread->lastActivate - thread->lastSuspend)
|
||||
* hostFactor;
|
||||
numCycles += ticksToCycles(thread->lastActivate - thread->lastSuspend);
|
||||
|
||||
schedule(tickEvent, clockEdge(delay));
|
||||
_status = Running;
|
||||
|
|
|
@ -670,6 +670,10 @@ class BaseKvmCPU : public BaseCPU
|
|||
*/
|
||||
std::unique_ptr<BaseKvmTimer> runTimer;
|
||||
|
||||
/** Host frequency */
|
||||
Tick hostFreq;
|
||||
|
||||
/** Host factor as specified in the configuration */
|
||||
float hostFactor;
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in a new issue