diff options
author | Daniel R. Carvalho <odanrc@yahoo.com.br> | 2018-10-19 12:24:02 +0200 |
---|---|---|
committer | Daniel Carvalho <odanrc@yahoo.com.br> | 2020-01-17 16:31:03 +0000 |
commit | 62dfa5a1fb90d3559c2f2604c1a2fb7693bb8dc2 (patch) | |
tree | 63c5e6fb110990d7cff5b44c2c7d786f50ce4ede | |
parent | 37bcb128fac31c7b0040fe03bc64b07d9b543ec6 (diff) | |
download | gem5-62dfa5a1fb90d3559c2f2604c1a2fb7693bb8dc2.tar.xz |
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>
-rw-r--r-- | src/mem/cache/tags/compressed_tags.cc | 7 | ||||
-rw-r--r-- | src/mem/cache/tags/sector_tags.cc | 31 | ||||
-rw-r--r-- | src/mem/cache/tags/sector_tags.hh | 13 |
3 files changed, 48 insertions, 3 deletions
diff --git a/src/mem/cache/tags/compressed_tags.cc b/src/mem/cache/tags/compressed_tags.cc index 1871a7ad6..d2ab7cf43 100644 --- a/src/mem/cache/tags/compressed_tags.cc +++ b/src/mem/cache/tags/compressed_tags.cc @@ -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; } diff --git a/src/mem/cache/tags/sector_tags.cc b/src/mem/cache/tags/sector_tags.cc index 610cba8ce..d2fcd7612 100644 --- a/src/mem/cache/tags/sector_tags.cc +++ b/src/mem/cache/tags/sector_tags.cc @@ -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) { diff --git a/src/mem/cache/tags/sector_tags.hh b/src/mem/cache/tags/sector_tags.hh index 905a87aaf..3ad59e39d 100644 --- a/src/mem/cache/tags/sector_tags.hh +++ b/src/mem/cache/tags/sector_tags.hh @@ -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; |