mem-cache: Encapsulate CacheBlk's refCount
authorDaniel R. Carvalho <odanrc@yahoo.com.br>
Mon, 21 Sep 2020 15:32:01 +0000 (17:32 +0200)
committerDaniel Carvalho <odanrc@yahoo.com.br>
Tue, 6 Oct 2020 09:05:49 +0000 (09:05 +0000)
Encapsulate this variable to facilitate polymorphism.

- refCount was renamed to _refCount and was privatized.
- The reference count should only be reset at invalidation;
  thus, its setter is not public.
- An additional function was created to increment the number
  of references by 1.

Change-Id: Ibc8799a8dcb7c53c651de3eb1c9b86118a297b9d
Signed-off-by: Daniel R. Carvalho <odanrc@yahoo.com.br>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/34957
Reviewed-by: Jason Lowe-Power <power.jg@gmail.com>
Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com>
Tested-by: kokoro <noreply+kokoro@google.com>
src/mem/cache/cache_blk.cc
src/mem/cache/cache_blk.hh
src/mem/cache/tags/base.cc
src/mem/cache/tags/base.hh
src/mem/cache/tags/base_set_assoc.hh
src/mem/cache/tags/sector_tags.cc

index 1b44371a25c507453e248700c74c15b73d1e5e3a..c591aaa53f0deec1bcc730c432d4fbb95f20cfc0 100644 (file)
@@ -69,7 +69,7 @@ CacheBlk::insert(const Addr tag, const bool is_secure,
     tickInserted = curTick();
 
     // Insertion counts as a reference to the block
-    refCount = 1;
+    increaseRefCount();
 
     // Set secure state
     if (is_secure) {
index 77fd4b8f6ce5c26eaf0ca9c8ca094f1b21638d44..cfc05a1c94040922da73d6bf7003850ba0dd3a47 100644 (file)
@@ -106,9 +106,6 @@ class CacheBlk : public ReplaceableEntry
      */
     Tick whenReady;
 
-    /** Number of references to this block since it was brought in. */
-    unsigned refCount;
-
     /** holds the source requestor ID for this block. */
     int srcRequestorId;
 
@@ -210,7 +207,7 @@ class CacheBlk : public ReplaceableEntry
         setTaskId(ContextSwitchTaskId::Unknown);
         status = 0;
         whenReady = MaxTick;
-        refCount = 0;
+        setRefCount(0);
         srcRequestorId = Request::invldRequestorId;
         lockList.clear();
     }
@@ -301,6 +298,12 @@ class CacheBlk : public ReplaceableEntry
     /** Get the task id associated to this block. */
     uint32_t getTaskId() const { return _taskId; }
 
+    /** Get the number of references to this block since insertion. */
+    unsigned getRefCount() const { return _refCount; }
+
+    /** Get the number of references to this block since insertion. */
+    void increaseRefCount() { _refCount++; }
+
     /**
      * Checks if the given information corresponds to this block's.
      *
@@ -456,12 +459,18 @@ class CacheBlk : public ReplaceableEntry
     /** Set the task id value. */
     void setTaskId(const uint32_t task_id) { _taskId = task_id; }
 
+    /** Set the number of references to this block since insertion. */
+    void setRefCount(const unsigned count) { _refCount = count; }
+
   private:
     /** Data block tag value. */
     Addr _tag;
 
     /** Task Id associated with this block */
     uint32_t _taskId;
+
+    /** Number of references to this block since it was brought in. */
+    unsigned _refCount;
 };
 
 /**
index 19b6200296d9595861eca9f190103699f729751e..61be03e9fdf6d1908d1409d2369a66590eddd066 100644 (file)
@@ -133,7 +133,7 @@ void
 BaseTags::cleanupRefsVisitor(CacheBlk &blk)
 {
     if (blk.isValid()) {
-        stats.totalRefs += blk.refCount;
+        stats.totalRefs += blk.getRefCount();
         ++stats.sampledRefs;
     }
 }
index 5e0af20bdfe18d3767280443b5a300c9d323b5cb..700edcb92775f2933d48b0d9ed13defaef1d9d24 100644 (file)
@@ -254,7 +254,7 @@ class BaseTags : public ClockedObject
         assert(blk->isValid());
 
         stats.occupancies[blk->srcRequestorId]--;
-        stats.totalRefs += blk->refCount;
+        stats.totalRefs += blk->getRefCount();
         stats.sampledRefs++;
 
         blk->invalidate();
index d273f1e38dd3be9c0775dc474932f73679dd39cd..211bc1fdbfa4e0b46d05529acfdf7847654d5d24 100644 (file)
@@ -141,7 +141,7 @@ class BaseSetAssoc : public BaseTags
         // If a cache hit
         if (blk != nullptr) {
             // Update number of references to accessed block
-            blk->refCount++;
+            blk->increaseRefCount();
 
             // Update replacement data of accessed block
             replacementPolicy->touch(blk->replacementData);
index e43237ea29811ae6b32ccec64202ba6c4858c747..43020aa2860d78f6fcb9eb7e5a1f45ef7596e4db 100644 (file)
@@ -151,7 +151,7 @@ SectorTags::accessBlock(Addr addr, bool is_secure, Cycles &lat)
     // If a cache hit
     if (blk != nullptr) {
         // Update number of references to accessed block
-        blk->refCount++;
+        blk->increaseRefCount();
 
         // Get block's sector
         SectorSubBlk* sub_blk = static_cast<SectorSubBlk*>(blk);