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 gem5-dev@gem5.org http://m5sim.org/mailman/listinfo/gem5-dev