mem-cache: Move reference count stats update to blk invalidation
authorNikos Nikoleris <nikos.nikoleris@arm.com>
Thu, 10 May 2018 10:44:47 +0000 (11:44 +0100)
committerNikos Nikoleris <nikos.nikoleris@arm.com>
Thu, 17 May 2018 14:39:54 +0000 (14:39 +0000)
The tags in the cache keep track of the number of references to the
blocks as well as the average number of references between an
insertion and the next invalidation. Previously the stats where
updated only on block insertion and invalidations were ignored. This
changes moves the update of the counters to the block invalidation
function.

Change-Id: Ie7672c13813ec278a65232694024d2e5e17c4612
Reviewed-on: https://gem5-review.googlesource.com/10428
Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com>
Reviewed-by: Daniel Carvalho <odanrc@yahoo.com.br>
src/mem/cache/tags/base.cc
src/mem/cache/tags/base.hh

index 0087de818ed8666443e7a58d91abc0923132fe12..dfd6976fd80223d6deb0163cd3a46a93e5256df6 100644 (file)
@@ -78,16 +78,8 @@ BaseTags::insertBlock(PacketPtr pkt, CacheBlk *blk)
     // Get address
     Addr addr = pkt->getAddr();
 
-    // If we're replacing a block that was previously valid update
-    // stats for it. This can't be done in findBlock() because a
-    // found block might not actually be replaced there if the
-    // coherence protocol says it can't be.
     if (blk->isValid()) {
-        totalRefs += blk->refCount;
-        ++sampledRefs;
-
         invalidate(blk);
-        blk->invalidate();
     }
 
     // Previous block, if existed, has been removed, and now we have
index c04329fe9f5aca0d28a6b96fdd13015876254fcd..47bab43236b25743d5e4c461e62768ce46363855 100644 (file)
@@ -239,16 +239,21 @@ class BaseTags : public ClockedObject
     }
 
     /**
-     * This function updates the tags when a block is invalidated but
-     * does not invalidate the block itself.
-     * @param blk The block to invalidate.
+     * This function updates the tags when a block is invalidated
+     *
+     * @param blk A valid block to invalidate.
      */
     virtual void invalidate(CacheBlk *blk)
     {
         assert(blk);
         assert(blk->isValid());
+
         tagsInUse--;
         occupancies[blk->srcMasterId]--;
+        totalRefs += blk->refCount;
+        sampledRefs++;
+
+        blk->invalidate();
     }
 
     /**