diff options
author | Rekai Gonzalez Alberquilla <Rekai.GonzalezAlberquilla@arm.com> | 2015-05-27 13:50:01 +0100 |
---|---|---|
committer | Rekai Gonzalez Alberquilla <Rekai.GonzalezAlberquilla@arm.com> | 2015-05-27 13:50:01 +0100 |
commit | a3bf4aa6ec9caa68a558f7347d55991f7a254fa5 (patch) | |
tree | 119e12016b32ddc297e52524ae5ad9c7ab9a83b8 /src/mem/cache | |
parent | c75ff71139d6358678835cca63e35d1135eaf466 (diff) | |
download | gem5-a3bf4aa6ec9caa68a558f7347d55991f7a254fa5.tar.xz |
mem: Add unused prefetch counter in caches
Added stat to the cache to account for HardPF'ed blocks that are evicted
before being referenced (over-prefetching).
Diffstat (limited to 'src/mem/cache')
-rw-r--r-- | src/mem/cache/base.cc | 6 | ||||
-rw-r--r-- | src/mem/cache/base.hh | 3 | ||||
-rw-r--r-- | src/mem/cache/cache.cc | 3 |
3 files changed, 12 insertions, 0 deletions
diff --git a/src/mem/cache/base.cc b/src/mem/cache/base.cc index ecbd3526e..3ae52cebd 100644 --- a/src/mem/cache/base.cc +++ b/src/mem/cache/base.cc @@ -444,6 +444,12 @@ BaseCache::regStats() .desc("number of cache copies performed") ; + unusedPrefetches + .name(name() + ".unused_prefetches") + .desc("number of HardPF blocks evicted w/o reference") + .flags(nozero) + ; + writebacks .init(system->maxMasters()) .name(name() + ".writebacks") diff --git a/src/mem/cache/base.hh b/src/mem/cache/base.hh index cd21bce91..9275eb453 100644 --- a/src/mem/cache/base.hh +++ b/src/mem/cache/base.hh @@ -387,6 +387,9 @@ class BaseCache : public MemObject /** The number of cache copies performed. */ Stats::Scalar cacheCopies; + /** The number of times a HW-prefetched block is evicted w/o reference. */ + Stats::Scalar unusedPrefetches; + /** Number of blocks written back per thread. */ Stats::Vector writebacks; diff --git a/src/mem/cache/cache.cc b/src/mem/cache/cache.cc index 267497aca..5d5760ff3 100644 --- a/src/mem/cache/cache.cc +++ b/src/mem/cache/cache.cc @@ -1709,6 +1709,9 @@ Cache::allocateBlock(Addr addr, bool is_secure, PacketList &writebacks) addr, is_secure ? "s" : "ns", blk->isDirty() ? "writeback" : "clean"); + if (blk->wasPrefetched()) { + unusedPrefetches++; + } // Will send up Writeback/CleanEvict snoops via isCachedAbove // when pushing this writeback list into the write buffer. if (blk->isDirty() || writebackClean) { |