/*
- * Copyright (c) 2012-2013, 2015 ARM Limited
- * All rights reserved
+ * Copyright (c) 2012-2013, 2015, 2018 ARM Limited
+ * Copyright (c) 2016 Google Inc.
+ * Copyright (c) 2017, Centre National de la Recherche Scientifique
+ * All rights reserved.
*
* The license below extends only to copyright in the software and shall
* not be construed as granting a license to any other intellectual
*
* Authors: Thomas Grass
* Andreas Hansson
+ * Rahul Thakur
+ * Pierre-Yves Peneau
*/
#ifndef __MEM_COMM_MONITOR_HH__
#include "base/statistics.hh"
#include "mem/mem_object.hh"
-#include "mem/stack_dist_calc.hh"
#include "params/CommMonitor.hh"
-#include "proto/protoio.hh"
-#include "sim/system.hh"
+#include "sim/probe/mem.hh"
/**
* The communication monitor is a MemObject which can monitor statistics of
*/
CommMonitor(Params* params);
- /** Destructor */
- ~CommMonitor();
-
- void init() M5_ATTR_OVERRIDE;
- void regStats() M5_ATTR_OVERRIDE;
- void startup() M5_ATTR_OVERRIDE;
+ void init() override;
+ void regStats() override;
+ void startup() override;
+ void regProbePoints() override;
public: // MemObject interfaces
- BaseMasterPort& getMasterPort(const std::string& if_name,
- PortID idx = InvalidPortID) M5_ATTR_OVERRIDE;
-
- BaseSlavePort& getSlavePort(const std::string& if_name,
- PortID idx = InvalidPortID) M5_ATTR_OVERRIDE;
+ Port &getPort(const std::string &if_name,
+ PortID idx=InvalidPortID) override;
private:
mon.recvReqRetry();
}
+ void recvRetrySnoopResp()
+ {
+ mon.recvRetrySnoopResp();
+ }
+
private:
CommMonitor& mon;
mon.recvRespRetry();
}
+ bool tryTiming(PacketPtr pkt)
+ {
+ return mon.tryTiming(pkt);
+ }
+
private:
CommMonitor& mon;
bool recvTimingSnoopResp(PacketPtr pkt);
+ void recvRetrySnoopResp();
+
AddrRangeList getAddrRanges() const;
bool isSnooping() const;
void recvRangeChange();
+ bool tryTiming(PacketPtr pkt);
+
/** Stats declarations, all in a struct for convenience. */
struct MonitorStats
{
- /** Disable flag for burst length historgrams **/
+ /** Disable flag for burst length histograms **/
bool disableBurstLengthHists;
/** Histogram of read burst lengths */
/** Disable flag for address distributions. */
bool disableAddrDists;
+ /** Address mask for sources of read accesses to be captured */
+ const Addr readAddrMask;
+
+ /** Address mask for sources of write accesses to be captured */
+ const Addr writeAddrMask;
+
/**
* Histogram of number of read accesses to addresses over
* time.
outstandingReadReqs(0), outstandingWriteReqs(0),
disableTransactionHists(params->disable_transaction_hists),
readTrans(0), writeTrans(0),
- disableAddrDists(params->disable_addr_dists)
+ disableAddrDists(params->disable_addr_dists),
+ readAddrMask(params->read_addr_mask),
+ writeAddrMask(params->write_addr_mask)
{ }
+ void updateReqStats(const ProbePoints::PacketInfo& pkt, bool is_atomic,
+ bool expects_response);
+ void updateRespStats(const ProbePoints::PacketInfo& pkt, Tick latency,
+ bool is_atomic);
};
/** This function is called periodically at the end of each time bin */
void samplePeriodic();
- /**
- * Callback to flush and close all open output streams on exit. If
- * we were calling the destructor it could be done there.
- */
- void closeStreams();
-
/** Periodic event called at the end of each simulation time bin */
- EventWrapper<CommMonitor, &CommMonitor::samplePeriodic> samplePeriodicEvent;
+ EventFunctionWrapper samplePeriodicEvent;
/**
*@{
/** Sample period in seconds */
const double samplePeriod;
- /** Address mask for sources of read accesses to be captured */
- const Addr readAddrMask;
-
- /** Address mask for sources of write accesses to be captured */
- const Addr writeAddrMask;
+ /** @} */
- /** Optional stack distance calculator */
- StackDistCalc *const stackDistCalc;
+ /** Instantiate stats */
+ MonitorStats stats;
- /** The system in which the monitor lives */
- System *const system;
+ protected: // Probe points
+ /**
+ * @{
+ * @name Memory system probe points
+ */
- /** @} */
+ /** Successfully forwarded request packet */
+ ProbePoints::PacketUPtr ppPktReq;
- /** Output stream for a potential trace. */
- ProtoOutputStream *traceStream;
+ /** Successfully forwarded response packet */
+ ProbePoints::PacketUPtr ppPktResp;
- /** Instantiate stats */
- MonitorStats stats;
+ /** @} */
};
#endif //__MEM_COMM_MONITOR_HH__