changeset cd8aae15f89a in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=cd8aae15f89a
description:
mem: Add stack distance statistics to the CommMonitor
This patch adds the stack distance calculator to the CommMonitor. The
stats are disabled by default.
diffstat:
src/mem/CommMonitor.py | 3 +++
src/mem/comm_monitor.cc | 16 ++++++++++++++--
src/mem/comm_monitor.hh | 6 ++++--
3 files changed, 21 insertions(+), 4 deletions(-)
diffs (100 lines):
diff -r da37aec3ed1a -r cd8aae15f89a src/mem/CommMonitor.py
--- a/src/mem/CommMonitor.py Tue Dec 23 09:31:18 2014 -0500
+++ b/src/mem/CommMonitor.py Tue Dec 23 09:31:18 2014 -0500
@@ -110,3 +110,6 @@
read_addr_mask = Param.Addr(MaxAddr, "Address mask for read address")
write_addr_mask = Param.Addr(MaxAddr, "Address mask for write address")
disable_addr_dists = Param.Bool(True, "Disable address distributions")
+
+ # optional stack distance calculator
+ stack_dist_calc = Param.StackDistCalc(NULL, "Stack distance calculator")
diff -r da37aec3ed1a -r cd8aae15f89a src/mem/comm_monitor.cc
--- a/src/mem/comm_monitor.cc Tue Dec 23 09:31:18 2014 -0500
+++ b/src/mem/comm_monitor.cc Tue Dec 23 09:31:18 2014 -0500
@@ -55,6 +55,7 @@
readAddrMask(params->read_addr_mask),
writeAddrMask(params->write_addr_mask),
stats(params),
+ stackDistCalc(params->stack_dist_calc),
traceStream(NULL),
system(params->system)
{
@@ -137,6 +138,7 @@
if (!system->isTimingMode())
warn("%s: Not in timing mode. No trace will be recorded.", name());
}
+
}
BaseMasterPort&
@@ -174,6 +176,10 @@
Tick
CommMonitor::recvAtomic(PacketPtr pkt)
{
+ // allow stack distance calculations for atomic if enabled
+ if (stackDistCalc)
+ stackDistCalc->update(pkt->cmd, pkt->getAddr());
+
return masterPort.sendAtomic(pkt);
}
@@ -193,7 +199,8 @@
// or even deleted when sendTiming() is called.
bool is_read = pkt->isRead();
bool is_write = pkt->isWrite();
- int cmd = pkt->cmdToIndex();
+ MemCmd cmd = pkt->cmd;
+ int cmd_idx = pkt->cmdToIndex();
Request::FlagsType req_flags = pkt->req->getFlags();
unsigned size = pkt->getSize();
Addr addr = pkt->getAddr();
@@ -216,13 +223,18 @@
delete pkt->popSenderState();
}
+ // If successful and we are calculating stack distances, update
+ // the calculator
+ if (successful && stackDistCalc)
+ stackDistCalc->update(cmd, addr);
+
if (successful && traceStream != NULL) {
// Create a protobuf message representing the
// packet. Currently we do not preserve the flags in the
// trace.
ProtoMessage::Packet pkt_msg;
pkt_msg.set_tick(curTick());
- pkt_msg.set_cmd(cmd);
+ pkt_msg.set_cmd(cmd_idx);
pkt_msg.set_flags(req_flags);
pkt_msg.set_addr(addr);
pkt_msg.set_size(size);
diff -r da37aec3ed1a -r cd8aae15f89a src/mem/comm_monitor.hh
--- a/src/mem/comm_monitor.hh Tue Dec 23 09:31:18 2014 -0500
+++ b/src/mem/comm_monitor.hh Tue Dec 23 09:31:18 2014 -0500
@@ -44,6 +44,7 @@
#include "base/statistics.hh"
#include "base/time.hh"
#include "mem/mem_object.hh"
+#include "mem/stack_dist_calc.hh"
#include "params/CommMonitor.hh"
#include "proto/protoio.hh"
#include "sim/system.hh"
@@ -268,8 +269,6 @@
void recvRangeChange();
- void periodicTraceDump();
-
/** Stats declarations, all in a struct for convenience. */
struct MonitorStats
{
@@ -417,6 +416,9 @@
/** Instantiate stats */
MonitorStats stats;
+ /** Optional stack distance calculator */
+ StackDistCalc* stackDistCalc;
+
/** Output stream for a potential trace. */
ProtoOutputStream* traceStream;
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev