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 <[email protected]>
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
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev