mem-cache: Add multiple eviction stats
Add stats to inform how many blocks were evicted due to a sector replacement/eviction. Change-Id: I886365506016d0888f835d182b3b65a808a9dccd Signed-off-by: Daniel R. Carvalho <odanrc@yahoo.com.br> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/22606 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com> Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com>
This commit is contained in:
committed by
Daniel Carvalho
parent
37bcb128fa
commit
62dfa5a1fb
7
src/mem/cache/tags/compressed_tags.cc
vendored
7
src/mem/cache/tags/compressed_tags.cc
vendored
@@ -138,7 +138,9 @@ CompressedTags::findVictim(Addr addr, const bool is_secure,
|
||||
|
||||
// The whole superblock must be evicted to make room for the new one
|
||||
for (const auto& blk : victim_superblock->blks){
|
||||
evict_blks.push_back(blk);
|
||||
if (blk->isValid()) {
|
||||
evict_blks.push_back(blk);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -159,6 +161,9 @@ CompressedTags::findVictim(Addr addr, const bool is_secure,
|
||||
}
|
||||
}
|
||||
|
||||
// Update number of sub-blocks evicted due to a replacement
|
||||
sectorStats.evictionsReplacement[evict_blks.size()]++;
|
||||
|
||||
return victim;
|
||||
}
|
||||
|
||||
|
||||
31
src/mem/cache/tags/sector_tags.cc
vendored
31
src/mem/cache/tags/sector_tags.cc
vendored
@@ -53,7 +53,8 @@ SectorTags::SectorTags(const SectorTagsParams *p)
|
||||
replacementPolicy(p->replacement_policy),
|
||||
numBlocksPerSector(p->num_blocks_per_sector),
|
||||
numSectors(numBlocks / numBlocksPerSector),
|
||||
sectorShift(floorLog2(blkSize)), sectorMask(numBlocksPerSector - 1)
|
||||
sectorShift(floorLog2(blkSize)), sectorMask(numBlocksPerSector - 1),
|
||||
sectorStats(stats, *this)
|
||||
{
|
||||
// Check parameters
|
||||
fatal_if(blkSize < 4 || !isPowerOf2(blkSize),
|
||||
@@ -260,10 +261,15 @@ SectorTags::findVictim(Addr addr, const bool is_secure, const std::size_t size,
|
||||
} else {
|
||||
// The whole sector must be evicted to make room for the new sector
|
||||
for (const auto& blk : victim_sector->blks){
|
||||
evict_blks.push_back(blk);
|
||||
if (blk->isValid()) {
|
||||
evict_blks.push_back(blk);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Update number of sub-blocks evicted due to a replacement
|
||||
sectorStats.evictionsReplacement[evict_blks.size()]++;
|
||||
|
||||
return victim;
|
||||
}
|
||||
|
||||
@@ -282,6 +288,27 @@ SectorTags::regenerateBlkAddr(const CacheBlk* blk) const
|
||||
return sec_addr | ((Addr)blk_cast->getSectorOffset() << sectorShift);
|
||||
}
|
||||
|
||||
SectorTags::SectorTagsStats::SectorTagsStats(BaseTagStats &base_group,
|
||||
SectorTags& _tags)
|
||||
: Stats::Group(&base_group), tags(_tags),
|
||||
evictionsReplacement(this, "evictions_replacement",
|
||||
"Number of blocks evicted due to a replacement")
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
SectorTags::SectorTagsStats::regStats()
|
||||
{
|
||||
Stats::Group::regStats();
|
||||
|
||||
evictionsReplacement.init(tags.numBlocksPerSector + 1);
|
||||
for (unsigned i = 0; i <= tags.numBlocksPerSector; ++i) {
|
||||
evictionsReplacement.subname(i, std::to_string(i));
|
||||
evictionsReplacement.subdesc(i, "Number of replacements that caused " \
|
||||
"the eviction of " + std::to_string(i) + " blocks");
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
SectorTags::forEachBlk(std::function<void(CacheBlk &)> visitor)
|
||||
{
|
||||
|
||||
13
src/mem/cache/tags/sector_tags.hh
vendored
13
src/mem/cache/tags/sector_tags.hh
vendored
@@ -40,6 +40,7 @@
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "base/statistics.hh"
|
||||
#include "mem/cache/tags/base.hh"
|
||||
#include "mem/cache/tags/sector_blk.hh"
|
||||
#include "mem/packet.hh"
|
||||
@@ -88,6 +89,18 @@ class SectorTags : public BaseTags
|
||||
/** Mask out all bits that aren't part of the sector tag. */
|
||||
const unsigned sectorMask;
|
||||
|
||||
struct SectorTagsStats : public Stats::Group
|
||||
{
|
||||
const SectorTags& tags;
|
||||
|
||||
SectorTagsStats(BaseTagStats &base_group, SectorTags& _tags);
|
||||
|
||||
void regStats() override;
|
||||
|
||||
/** Number of sub-blocks evicted due to a replacement. */
|
||||
Stats::Vector evictionsReplacement;
|
||||
} sectorStats;
|
||||
|
||||
public:
|
||||
/** Convenience typedef. */
|
||||
typedef SectorTagsParams Params;
|
||||
|
||||
Reference in New Issue
Block a user