cpu: Additional TrafficGen stats
Additional stats to keep track of read/write latencies and throughput. Change-Id: I7684cd33cf68fffdef4ca9c3a6db360a0f531c18 Signed-off-by: Tiago Muck <tiago.muck@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/18418 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
@@ -354,6 +354,51 @@ BaseTrafficGen::regStats()
|
||||
retryTicks
|
||||
.name(name() + ".retryTicks")
|
||||
.desc("Time spent waiting due to back-pressure (ticks)");
|
||||
|
||||
bytesRead
|
||||
.name(name() + ".bytesRead")
|
||||
.desc("Number of bytes read");
|
||||
|
||||
bytesWritten
|
||||
.name(name() + ".bytesWritten")
|
||||
.desc("Number of bytes written");
|
||||
|
||||
totalReadLatency
|
||||
.name(name() + ".totalReadLatency")
|
||||
.desc("Total latency of read requests");
|
||||
|
||||
totalWriteLatency
|
||||
.name(name() + ".totalWriteLatency")
|
||||
.desc("Total latency of write requests");
|
||||
|
||||
totalReads
|
||||
.name(name() + ".totalReads")
|
||||
.desc("Total num of reads");
|
||||
|
||||
totalWrites
|
||||
.name(name() + ".totalWrites")
|
||||
.desc("Total num of writes");
|
||||
|
||||
avgReadLatency
|
||||
.name(name() + ".avgReadLatency")
|
||||
.desc("Avg latency of read requests");
|
||||
avgReadLatency = totalReadLatency / totalReads;
|
||||
|
||||
avgWriteLatency
|
||||
.name(name() + ".avgWriteLatency")
|
||||
.desc("Avg latency of write requests");
|
||||
avgWriteLatency = totalWriteLatency / totalWrites;
|
||||
|
||||
readBW
|
||||
.name(name() + ".readBW")
|
||||
.desc("Read bandwidth in bytes/s");
|
||||
readBW = bytesRead / simSeconds;
|
||||
|
||||
writeBW
|
||||
.name(name() + ".writeBW")
|
||||
.desc("Write bandwidth in bytes/s");
|
||||
writeBW = bytesWritten / simSeconds;
|
||||
|
||||
}
|
||||
|
||||
std::shared_ptr<BaseGen>
|
||||
@@ -470,6 +515,16 @@ BaseTrafficGen::recvTimingResp(PacketPtr pkt)
|
||||
|
||||
assert(iter->second <= curTick());
|
||||
|
||||
if (pkt->isWrite()) {
|
||||
++totalWrites;
|
||||
bytesWritten += pkt->req->getSize();
|
||||
totalWriteLatency += curTick() - iter->second;
|
||||
} else {
|
||||
++totalReads;
|
||||
bytesRead += pkt->req->getSize();
|
||||
totalReadLatency += curTick() - iter->second;
|
||||
}
|
||||
|
||||
waitingResp.erase(iter);
|
||||
|
||||
delete pkt;
|
||||
|
||||
@@ -206,6 +206,36 @@ class BaseTrafficGen : public ClockedObject
|
||||
/** Reqs waiting for response **/
|
||||
std::unordered_map<RequestPtr,Tick> waitingResp;
|
||||
|
||||
/** Count the number of bytes read. */
|
||||
Stats::Scalar bytesRead;
|
||||
|
||||
/** Count the number of bytes written. */
|
||||
Stats::Scalar bytesWritten;
|
||||
|
||||
/** Total num of ticks read reqs took to complete */
|
||||
Stats::Scalar totalReadLatency;
|
||||
|
||||
/** Total num of ticks write reqs took to complete */
|
||||
Stats::Scalar totalWriteLatency;
|
||||
|
||||
/** Count the number reads. */
|
||||
Stats::Scalar totalReads;
|
||||
|
||||
/** Count the number writes. */
|
||||
Stats::Scalar totalWrites;
|
||||
|
||||
/** Avg num of ticks each read req took to complete */
|
||||
Stats::Formula avgReadLatency;
|
||||
|
||||
/** Avg num of ticks each write reqs took to complete */
|
||||
Stats::Formula avgWriteLatency;
|
||||
|
||||
/** Read bandwidth in bytes/s */
|
||||
Stats::Formula readBW;
|
||||
|
||||
/** Write bandwidth in bytes/s */
|
||||
Stats::Formula writeBW;
|
||||
|
||||
public:
|
||||
BaseTrafficGen(const BaseTrafficGenParams* p);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user