From 7976b561de61b7523ca9a860154ad7ba701d12a7 Mon Sep 17 00:00:00 2001 From: "Daniel R. Carvalho" Date: Thu, 18 Apr 2019 14:54:18 +0200 Subject: [PATCH] mem-cache: Fix increasing replacement count Replacements should be increased when there is any evicted block, which does not necessarily have to be the victim. For example, assume a superblock contains 4 blocks, and both A and C are stored compressed (belonging to SB_1). Then F, from SB2 needs to make room by replacing SB1. If F map to location 2, the number of replacements should be increased, even though 2 had no valid blocks: Tag Data Tag Data |SB_1|--|A|X|C|X| --> |SB_2| |X|F|X|X| 1 2 3 4 1 2 3 4 Change-Id: I7b3735d28a35faa8d8fa613a1555bb258da65859 Signed-off-by: Daniel R. Carvalho Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/18208 Tested-by: kokoro Reviewed-by: Jason Lowe-Power Maintainer: Jason Lowe-Power --- src/mem/cache/base.cc | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/mem/cache/base.cc b/src/mem/cache/base.cc index 70e7ba186..849cff598 100644 --- a/src/mem/cache/base.cc +++ b/src/mem/cache/base.cc @@ -1326,12 +1326,14 @@ BaseCache::allocateBlock(const PacketPtr pkt, PacketList &writebacks) // The victim will be replaced by a new entry, so increase the replacement // counter if a valid block is being replaced - if (victim->isValid()) { - DPRINTF(Cache, "replacement: replacing %#llx (%s) with %#llx " - "(%s): %s\n", regenerateBlkAddr(victim), - victim->isSecure() ? "s" : "ns", - addr, is_secure ? "s" : "ns", - victim->isDirty() ? "writeback" : "clean"); + if (evict_blks.size() > 0) { + for (const auto& blk : evict_blks) { + if (blk->isValid()) { + DPRINTF(CacheRepl, "Evicting %s (%#llx) to make room for " \ + "%#llx (%s)\n", blk->print(), regenerateBlkAddr(blk), + addr, is_secure); + } + } replacements++; } -- 2.30.2