Nathanael Premillieu has uploaded this change for review. (
https://gem5-review.googlesource.com/c/public/gem5/+/47204 )
Change subject: mem: adding late prefetch stats
......................................................................
mem: adding late prefetch stats
Adding a late prefetch stat plus stats for each reason a prefetch can be
detected as late
Change-Id: Ia6d5294e8ce58b2b0aae2be98fd0cee83be73b8d
---
M src/mem/cache/base.cc
M src/mem/cache/base.hh
2 files changed, 45 insertions(+), 6 deletions(-)
diff --git a/src/mem/cache/base.cc b/src/mem/cache/base.cc
index 0c5c13e..7d0e83c 100644
--- a/src/mem/cache/base.cc
+++ b/src/mem/cache/base.cc
@@ -52,6 +52,7 @@
#include "debug/CachePort.hh"
#include "debug/CacheRepl.hh"
#include "debug/CacheVerbose.hh"
+#include "debug/HWPrefetch.hh"
#include "mem/cache/compressors/base.hh"
#include "mem/cache/mshr.hh"
#include "mem/cache/prefetch/base.hh"
@@ -824,9 +825,25 @@
PacketPtr pkt = prefetcher->getPacket();
if (pkt) {
Addr pf_addr = pkt->getBlockAddr(blkSize);
- if (!tags->findBlock(pf_addr, pkt->isSecure()) &&
- !mshrQueue.findMatch(pf_addr, pkt->isSecure()) &&
- !writeBuffer.findMatch(pf_addr, pkt->isSecure())) {
+ if (tags->findBlock(pf_addr, pkt->isSecure())) {
+ DPRINTF(HWPrefetch, "Prefetch %#x has hit in cache, "
+ "dropped.\n", pf_addr);
+ stats.hitInCachePrefetches++;
+ // free the request and packet
+ delete pkt;
+ } else if (mshrQueue.findMatch(pf_addr, pkt->isSecure())) {
+ DPRINTF(HWPrefetch, "Prefetch %#x has hit in a MSHR, "
+ "dropped.\n", pf_addr);
+ stats.hitInMSHRPrefetches++;
+ // free the request and packet
+ delete pkt;
+ } else if (writeBuffer.findMatch(pf_addr, pkt->isSecure())) {
+ DPRINTF(HWPrefetch, "Prefetch %#x has hit in the "
+ "Write Buffer, dropped.\n", pf_addr);
+ stats.hitInWBPrefetches++;
+ // free the request and packet
+ delete pkt;
+ } else {
// Update statistic on number of prefetches issued
// (hwpf_mshr_misses)
assert(pkt->req->requestorId() < system->maxRequestors());
@@ -836,9 +853,6 @@
// that we send the packet straight away, so do not
// schedule the send
return allocateMissBuffer(pkt, curTick(), false);
- } else {
- // free the request and packet
- delete pkt;
}
}
}
@@ -2132,6 +2146,14 @@
ADD_STAT(usefulPrefetches, statistics::units::Count::get(),
"number of useful prefetches (prefetched block accessed at
least "
"once)"),
+ ADD_STAT(hitInCachePrefetches, statistics::units::Count::get(),
+ "number of prefetches hitting in cache"),
+ ADD_STAT(hitInMSHRPrefetches, statistics::units::Count::get(),
+ "number of prefetches hitting in a MSHR"),
+ ADD_STAT(hitInWBPrefetches, statistics::units::Count::get(),
+ "number of prefetches hit in the Write Buffer"),
+ ADD_STAT(latePrefetches, statistics::units::Count::get(),
+ "number of late prefetches (hitting in cache, MSHR or WB)"),
ADD_STAT(unusedPrefetches, statistics::units::Count::get(),
"number of HardPF blocks evicted w/o reference"),
ADD_STAT(writebacks, statistics::units::Count::get(), "number of
writebacks"),
@@ -2293,6 +2315,9 @@
;
avgBlocked = blockedCycles / blockedCauses;
+ latePrefetches = hitInCachePrefetches + hitInMSHRPrefetches +
+ hitInWBPrefetches;
+
unusedPrefetches.flags(nozero);
writebacks
diff --git a/src/mem/cache/base.hh b/src/mem/cache/base.hh
index bf01152..f323b17 100644
--- a/src/mem/cache/base.hh
+++ b/src/mem/cache/base.hh
@@ -1084,6 +1084,20 @@
/** The number of times a HW-prefetch is useful. */
Stats::Scalar usefulPrefetches;
+ /** The number of times a HW-prefetch hits in cache. */
+ Stats::Scalar hitInCachePrefetches;
+
+ /** The number of times a HW-prefetch hits in a MSHR. */
+ Stats::Scalar hitInMSHRPrefetches;
+
+ /** The number of times a HW-prefetch hits
+ * in the Write Buffer (WB). */
+ Stats::Scalar hitInWBPrefetches;
+
+ /** The number of times a HW-prefetch is late
+ * (hit in cache, MSHR, WB). */
+ Stats::Formula latePrefetches;
+
/** The number of times a HW-prefetched block is evicted w/o
* reference. */
statistics::Scalar unusedPrefetches;
--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/47204
To unsubscribe, or for help writing mail filters, visit
https://gem5-review.googlesource.com/settings
Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: Ia6d5294e8ce58b2b0aae2be98fd0cee83be73b8d
Gerrit-Change-Number: 47204
Gerrit-PatchSet: 1
Gerrit-Owner: Nathanael Premillieu <nathanael.premill...@huawei.com>
Gerrit-MessageType: newchange
_______________________________________________
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s