changeset beaf1afe2f83 in /z/repo/gem5 details: http://repo.gem5.org/gem5?cmd=changeset;node=beaf1afe2f83 description: mem: Add callback to compute stats prior to dump event
The per rank statistics are periodically updated based on state transition and refresh events. Add a method to update these when a dump event occurs to ensure they reflect accurate values. Specifically, need to ensure that the low-power state durations, power, and energy are logged correctly. Change-Id: Ib642a6668340de8f494a608bb34982e58ba7f1eb Reviewed-by: Radhika Jagtap <radhika.jag...@arm.com> diffstat: src/mem/dram_ctrl.cc | 20 ++++++++++++++++++++ src/mem/dram_ctrl.hh | 18 ++++++++++++++++++ 2 files changed, 38 insertions(+), 0 deletions(-) diffs (79 lines): diff -r 8a882e297eb2 -r beaf1afe2f83 src/mem/dram_ctrl.cc --- a/src/mem/dram_ctrl.cc Thu Oct 13 19:22:11 2016 +0100 +++ b/src/mem/dram_ctrl.cc Thu Oct 13 19:22:11 2016 +0100 @@ -1857,6 +1857,24 @@ } void +DRAMCtrl::Rank::computeStats() +{ + DPRINTF(DRAM,"Computing final stats\n"); + + // Force DRAM power to update counters based on time spent in + // current state up to curTick() + cmdList.push_back(Command(MemCommand::NOP, 0, curTick())); + + // Update the stats + updatePowerStats(); + + // final update of power state times + pwrStateTime[pwrState] += (curTick() - pwrStateTick); + pwrStateTick = curTick(); + +} + +void DRAMCtrl::Rank::regStats() { using namespace Stats; @@ -1906,6 +1924,8 @@ averagePower .name(name() + ".averagePower") .desc("Core power per rank (mW)"); + + registerDumpCallback(new RankDumpCallback(this)); } void DRAMCtrl::regStats() diff -r 8a882e297eb2 -r beaf1afe2f83 src/mem/dram_ctrl.hh --- a/src/mem/dram_ctrl.hh Thu Oct 13 19:22:11 2016 +0100 +++ b/src/mem/dram_ctrl.hh Thu Oct 13 19:22:11 2016 +0100 @@ -56,6 +56,7 @@ #include <string> #include <unordered_set> +#include "base/callback.hh" #include "base/statistics.hh" #include "enums/AddrMap.hh" #include "enums/MemSched.hh" @@ -409,6 +410,11 @@ */ void regStats(); + /** + * Computes stats just prior to dump event + */ + void computeStats(); + void processActivateEvent(); EventWrapper<Rank, &Rank::processActivateEvent> activateEvent; @@ -427,6 +433,18 @@ }; + // define the process to compute stats on simulation exit + // defined per rank as the per rank stats are based on state + // transition and periodically updated, requiring re-sync at + // exit. + class RankDumpCallback : public Callback + { + Rank *ranks; + public: + RankDumpCallback(Rank *r) : ranks(r) {} + virtual void process() { ranks->computeStats(); }; + }; + /** * A burst helper helps organize and manage a packet that is larger than * the DRAM burst size. A system packet that is larger than the burst size _______________________________________________ gem5-dev mailing list gem5-dev@gem5.org http://m5sim.org/mailman/listinfo/gem5-dev