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 <odanrc@yahoo.com.br>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/18208
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Maintainer: Jason Lowe-Power <jason@lowepower.com>
diff --git a/src/mem/cache/base.cc b/src/mem/cache/base.cc
index 70e7ba1..849cff5 100644
--- a/src/mem/cache/base.cc
+++ b/src/mem/cache/base.cc
@@ -1326,12 +1326,14 @@
// 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++;
}