mem-cache: Virtualize block print
authorDaniel R. Carvalho <odanrc@yahoo.com.br>
Wed, 10 Oct 2018 12:44:05 +0000 (14:44 +0200)
committerDaniel Carvalho <odanrc@yahoo.com.br>
Thu, 11 Oct 2018 09:32:32 +0000 (09:32 +0000)
Encapsulate and virtualize block print, so that relevant
information can be easily printed anywhere.

Change-Id: I91109c29c126755183a0fd2b4446f5335e64076b
Signed-off-by: Daniel R. Carvalho <odanrc@yahoo.com.br>
Reviewed-on: https://gem5-review.googlesource.com/c/13415
Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com>

src/mem/cache/base.cc
src/mem/cache/blk.hh
src/mem/cache/sector_blk.cc
src/mem/cache/sector_blk.hh
src/mem/cache/tags/base.cc
src/mem/cache/tags/base_set_assoc.hh
src/mem/cache/tags/fa_lru.cc
src/mem/cache/tags/fa_lru.hh
src/mem/cache/tags/sector_tags.cc

index 736f167617ed5b38b2b97e93b644c8368eda3e5b..0eeb1925251ad4abbb01d36960fab750418227d9 100644 (file)
@@ -52,6 +52,7 @@
 #include "base/logging.hh"
 #include "debug/Cache.hh"
 #include "debug/CachePort.hh"
+#include "debug/CacheRepl.hh"
 #include "debug/CacheVerbose.hh"
 #include "mem/cache/mshr.hh"
 #include "mem/cache/prefetch/base.hh"
@@ -1237,6 +1238,9 @@ BaseCache::allocateBlock(const PacketPtr pkt, PacketList &writebacks)
     if (!victim)
         return nullptr;
 
+    // Print victim block's information
+    DPRINTF(CacheRepl, "Replacement victim: %s\n", victim->print());
+
     // Check for transient state allocations. If any of the entries listed
     // for eviction has a transient state, the allocation fails
     for (const auto& blk : evict_blks) {
index cc6d9057184240ee06a9a2046d911c9c588ea394..6d91e5584fdd9c18972376b3ca103c7b58c3a973 100644 (file)
@@ -292,12 +292,12 @@ class CacheBlk : public ReplaceableEntry
     }
 
     /**
-     * Pretty-print a tag, and interpret state bits to readable form
+     * Pretty-print tag, set and way, and interpret state bits to readable form
      * including mapping to a MOESI state.
      *
      * @return string with basic state information
      */
-    std::string print() const
+    virtual std::string print() const
     {
         /**
          *  state       M   O   E   S   I
@@ -334,8 +334,9 @@ class CacheBlk : public ReplaceableEntry
           default:    s = 'T'; break; // @TODO add other types
         }
         return csprintf("state: %x (%c) valid: %d writable: %d readable: %d "
-                        "dirty: %d tag: %x", status, s, isValid(),
-                        isWritable(), isReadable(), isDirty(), tag);
+                        "dirty: %d | tag: %#x set: %#x way: %#x", status, s,
+                        isValid(), isWritable(), isReadable(), isDirty(), tag,
+                        getSet(), getWay());
     }
 
     /**
index 07d9e9543f5add9b656af2f496bb295ee3a93c53..5607f4cccc9f56158c5fff59b9fa77eb49964fc6 100644 (file)
@@ -37,6 +37,7 @@
 
 #include <cassert>
 
+#include "base/cprintf.hh"
 #include "base/logging.hh"
 
 void
@@ -86,6 +87,13 @@ SectorSubBlk::insert(const Addr tag, const bool is_secure,
     _sectorBlk->setTag(tag);
 }
 
+std::string
+SectorSubBlk::print() const
+{
+    return csprintf("%s sector offset: %#x", CacheBlk::print(),
+                    getSectorOffset());
+}
+
 bool
 SectorBlk::isValid() const
 {
index f8f8cd5e648cd2d5aef2acde2373ffd1274f5642..66d83a23052e0ccd9e6551d9f2ead174ef57af4c 100644 (file)
@@ -114,6 +114,13 @@ class SectorSubBlk : public CacheBlk
      */
     void insert(const Addr tag, const bool is_secure, const int src_master_ID,
                 const uint32_t task_ID) override;
+
+    /**
+     * Pretty-print sector offset and other CacheBlk information.
+     *
+     * @return string with basic state information
+     */
+    std::string print() const override;
 };
 
 /**
index dddb8c71d2108f13d0d1813628bc8ffc4f8da71f..965e4ba16be46cdc7d2a3a3a30f9fd102115bd65 100644 (file)
@@ -201,8 +201,7 @@ BaseTags::print()
 
     auto print_blk = [&str](CacheBlk &blk) {
         if (blk.isValid())
-            str += csprintf("\tset: %x, way: %x %s\n", blk.getSet(),
-                            blk.getWay(), blk.print());
+            str += csprintf("\tBlock: %s\n", blk.print());
     };
     forEachBlk(print_blk);
 
index 01bfa05b24408d9507cad75ba7a2f023e00d96b9..11c0c8d11311c840443e283c6b4422e223bbad46 100644 (file)
@@ -54,7 +54,6 @@
 
 #include "base/logging.hh"
 #include "base/types.hh"
-#include "debug/CacheRepl.hh"
 #include "mem/cache/base.hh"
 #include "mem/cache/blk.hh"
 #include "mem/cache/replacement_policies/base.hh"
@@ -187,9 +186,6 @@ class BaseSetAssoc : public BaseTags
         // There is only one eviction for this replacement
         evict_blks.push_back(victim);
 
-        DPRINTF(CacheRepl, "set %x, way %x: selecting blk for replacement\n",
-                victim->getSet(), victim->getWay());
-
         return victim;
     }
 
index fa7c6595f177cbb4dbb19dcec71ec70bb9adc741..319d5602db26cd91833501f9b53defffe9c380a8 100644 (file)
 #include "base/logging.hh"
 #include "mem/cache/base.hh"
 
+std::string
+FALRUBlk::print() const
+{
+    return csprintf("%s inCachesMask: %#x", CacheBlk::print(), inCachesMask);
+}
+
 FALRU::FALRU(const Params *p)
     : BaseTags(p),
 
index 0d9a8d4401e47ec337b86dda0bf44cfeee8819c6..c2f983468a86fc4c2b4e4c76e9f80ff81816e30f 100644 (file)
@@ -92,6 +92,13 @@ class FALRUBlk : public CacheBlk
 
     /** A bit mask of the caches that fit this block. */
     CachesMask inCachesMask;
+
+    /**
+     * Pretty-print inCachesMask and other CacheBlk information.
+     *
+     * @return string with basic state information
+     */
+    std::string print() const override;
 };
 
 /**
index f256807e2657eaf9f7dad999cf806334ca04e520..e993e296bb665a2bcaa8ed60ae5885ed7529d818 100644 (file)
@@ -42,7 +42,6 @@
 #include "base/intmath.hh"
 #include "base/logging.hh"
 #include "base/types.hh"
-#include "debug/CacheRepl.hh"
 #include "mem/cache/base.hh"
 #include "mem/cache/replacement_policies/base.hh"
 #include "mem/cache/tags/indexing_policies/base.hh"
@@ -277,10 +276,6 @@ SectorTags::findVictim(Addr addr, const bool is_secure,
         }
     }
 
-    DPRINTF(CacheRepl, "set %x, way %x, sector offset %x: selecting blk " \
-            "for replacement\n", victim->getSet(), victim->getWay(),
-            victim->getSectorOffset());
-
     return victim;
 }