mem: Fill the new packet ID fields with master IDs when tracing packets.

This will let somebody consuming the memory packet trace make sense out of
the master IDs passed along with individual accesses.

Change-Id: I621d915f218728066ce95e6fc81f36d14ae7e597
Reviewed-on: https://gem5-review.googlesource.com/4800
Reviewed-by: Rahul Thakur <rjthakur@google.com>
Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com>
This commit is contained in:
Gabe Black
2017-09-21 17:48:33 -07:00
parent 10cd85c67c
commit 2e3bf009b1
3 changed files with 27 additions and 7 deletions

View File

@@ -52,3 +52,5 @@ class MemTraceProbe(BaseMemProbe):
# packet trace output file, disabled by default
trace_file = Param.String("", "Packet trace output file")
# System object to look up the name associated with a master ID
system = Param.System(Parent.any, "System the probe belongs to")

View File

@@ -44,10 +44,12 @@
#include "base/output.hh"
#include "params/MemTraceProbe.hh"
#include "proto/packet.pb.h"
#include "sim/system.hh"
MemTraceProbe::MemTraceProbe(MemTraceProbeParams *p)
: BaseMemProbe(p),
traceStream(nullptr),
system(p->system),
withPC(p->with_pc)
{
std::string filename;
@@ -72,13 +74,6 @@ MemTraceProbe::MemTraceProbe(MemTraceProbeParams *p)
traceStream = new ProtoOutputStream(filename);
// Create a protobuf message for the header and write it to
// the stream
ProtoMessage::PacketHeader header_msg;
header_msg.set_obj_id(name());
header_msg.set_tick_freq(SimClock::Frequency);
traceStream->write(header_msg);
// Register a callback to compensate for the destructor not
// being called. The callback forces the stream to flush and
// closes the output file.
@@ -86,6 +81,24 @@ MemTraceProbe::MemTraceProbe(MemTraceProbeParams *p)
new MakeCallback<MemTraceProbe, &MemTraceProbe::closeStreams>(this));
}
void
MemTraceProbe::startup()
{
// Create a protobuf message for the header and write it to
// the stream
ProtoMessage::PacketHeader header_msg;
header_msg.set_obj_id(name());
header_msg.set_tick_freq(SimClock::Frequency);
for (int i = 0; i < system->maxMasters(); i++) {
auto id_string = header_msg.add_id_strings();
id_string->set_key(i);
id_string->set_value(system->getMasterName(i));
}
traceStream->write(header_msg);
}
void
MemTraceProbe::closeStreams()
{

View File

@@ -45,6 +45,7 @@
#include "proto/protoio.hh"
struct MemTraceProbeParams;
class System;
class MemTraceProbe : public BaseMemProbe
{
@@ -60,11 +61,15 @@ class MemTraceProbe : public BaseMemProbe
*/
void closeStreams();
void startup() override;
protected:
/** Trace output stream */
ProtoOutputStream *traceStream;
System *system;
private:
/** Include the Program Counter in the memory trace */