mem-cache: Add block size to findVictim
authorDaniel R. Carvalho <odanrc@yahoo.com.br>
Fri, 15 Jun 2018 14:10:25 +0000 (16:10 +0200)
committerDaniel Carvalho <odanrc@yahoo.com.br>
Wed, 8 May 2019 17:41:09 +0000 (17:41 +0000)
Add block size to findVictim. For standard caches it
will not be used. Compressed caches, however, need to
know the size of the compressed block to decide whether
a block is co-allocatable or not.

Change-Id: Id07f79763687b29f75d707c080fa9bd978a408aa
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/11198
Tested-by: kokoro <noreply+kokoro@google.com>
Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com>
Reviewed-by: Mohammad Seyedzadeh <sm.seyedzade@gmail.com>
Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
src/mem/cache/base.cc
src/mem/cache/tags/base.hh
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
src/mem/cache/tags/sector_tags.hh

index f31fbaf03cf4023c8eb6a198a8d9a4f957ade4c1..36968a18df9db0bb6ad7dd84958ed4243d10cece 100644 (file)
@@ -1319,9 +1319,13 @@ BaseCache::allocateBlock(const PacketPtr pkt, PacketList &writebacks)
     // Get secure bit
     const bool is_secure = pkt->isSecure();
 
+    // @todo Compress and get compression related data
+    std::size_t blk_size_bits = blkSize*8;
+
     // Find replacement victim
     std::vector<CacheBlk*> evict_blks;
-    CacheBlk *victim = tags->findVictim(addr, is_secure, evict_blks);
+    CacheBlk *victim = tags->findVictim(addr, is_secure, blk_size_bits,
+                                        evict_blks);
 
     // It is valid to return nullptr if there is no victim
     if (!victim)
index 296837e505ec760272ff6626f5424bc49dcedbf5..ae9cab87e1938ff0f40f74bbeeff593cb7075636 100644 (file)
@@ -50,6 +50,7 @@
 #define __MEM_CACHE_TAGS_BASE_HH__
 
 #include <cassert>
+#include <cstdint>
 #include <functional>
 #include <string>
 
@@ -276,10 +277,12 @@ class BaseTags : public ClockedObject
      *
      * @param addr Address to find a victim for.
      * @param is_secure True if the target memory space is secure.
+     * @param size Size, in bits, of new block to allocate.
      * @param evict_blks Cache blocks to be evicted.
      * @return Cache block to be replaced.
      */
     virtual CacheBlk* findVictim(Addr addr, const bool is_secure,
+                                 const std::size_t size,
                                  std::vector<CacheBlk*>& evict_blks) const = 0;
 
     /**
index c39a8133511339bbcf21a979f32946be1850711b..f58f939515a96194e90dff150b66209e75e55855 100644 (file)
@@ -48,6 +48,7 @@
 #ifndef __MEM_CACHE_TAGS_BASE_SET_ASSOC_HH__
 #define __MEM_CACHE_TAGS_BASE_SET_ASSOC_HH__
 
+#include <cstdint>
 #include <functional>
 #include <string>
 #include <vector>
@@ -160,10 +161,12 @@ class BaseSetAssoc : public BaseTags
      *
      * @param addr Address to find a victim for.
      * @param is_secure True if the target memory space is secure.
+     * @param size Size, in bits, of new block to allocate.
      * @param evict_blks Cache blocks to be evicted.
      * @return Cache block to be replaced.
      */
     CacheBlk* findVictim(Addr addr, const bool is_secure,
+                         const std::size_t size,
                          std::vector<CacheBlk*>& evict_blks) const override
     {
         // Get possible entries to be victimized
index 4cdac0ac00da813ec7e8f39c1e2df1595a4ab421..0ebef4be70bcaec500c86a44b1940bef4fc1a7e4 100644 (file)
@@ -196,7 +196,7 @@ FALRU::findBlockBySetAndWay(int set, int way) const
 }
 
 CacheBlk*
-FALRU::findVictim(Addr addr, const bool is_secure,
+FALRU::findVictim(Addr addr, const bool is_secure, const std::size_t size,
                   std::vector<CacheBlk*>& evict_blks) const
 {
     // The victim is always stored on the tail for the FALRU
index 346ff60c7377e44fed45f168ff530c0be20487b8..2ca9f4da4c485cddad09302405e86c924e6c39ee 100644 (file)
@@ -219,10 +219,12 @@ class FALRU : public BaseTags
      *
      * @param addr Address to find a victim for.
      * @param is_secure True if the target memory space is secure.
+     * @param size Size, in bits, of new block to allocate.
      * @param evict_blks Cache blocks to be evicted.
      * @return Cache block to be replaced.
      */
     CacheBlk* findVictim(Addr addr, const bool is_secure,
+                         const std::size_t size,
                          std::vector<CacheBlk*>& evict_blks) const override;
 
     /**
index 06093e9974d5f09c0c36cb4605aaea13429cf78c..535badb8d7feb15891aed791b594d222a821ee66 100644 (file)
@@ -221,7 +221,7 @@ SectorTags::findBlock(Addr addr, bool is_secure) const
 }
 
 CacheBlk*
-SectorTags::findVictim(Addr addr, const bool is_secure,
+SectorTags::findVictim(Addr addr, const bool is_secure, const std::size_t size,
                        std::vector<CacheBlk*>& evict_blks) const
 {
     // Get possible entries to be victimized
index 84c721ef76340e5ed0a4977f2472b4efd75763c5..13638b4a5e7422f21393347603acfcc849ee7c3c 100644 (file)
@@ -36,6 +36,7 @@
 #ifndef __MEM_CACHE_TAGS_SECTOR_TAGS_HH__
 #define __MEM_CACHE_TAGS_SECTOR_TAGS_HH__
 
+#include <cstdint>
 #include <string>
 #include <vector>
 
@@ -150,10 +151,12 @@ class SectorTags : public BaseTags
      *
      * @param addr Address to find a victim for.
      * @param is_secure True if the target memory space is secure.
+     * @param size Size, in bits, of new block to allocate.
      * @param evict_blks Cache blocks to be evicted.
      * @return Cache block to be replaced.
      */
     CacheBlk* findVictim(Addr addr, const bool is_secure,
+                         const std::size_t size,
                          std::vector<CacheBlk*>& evict_blks) const override;
 
     /**