mem-cache: Remove Packet dependency in Tags
Decouple Tags from Packets, only extracting the necessary functionality for block insertion. As a side effect, create a new function to update common insertion statistics. Change-Id: I5c58f7c17de3255beee531f72a3fd25a30d74c90 Reviewed-on: https://gem5-review.googlesource.com/c/11098 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com> Maintainer: Jason Lowe-Power <jason@lowepower.com>
This commit is contained in:
committed by
Daniel Carvalho
parent
dd01790399
commit
86a54d9193
3
src/mem/cache/base.cc
vendored
3
src/mem/cache/base.cc
vendored
@@ -1280,7 +1280,8 @@ BaseCache::allocateBlock(const PacketPtr pkt, PacketList &writebacks)
|
||||
}
|
||||
|
||||
// Insert new block at victimized entry
|
||||
tags->insertBlock(pkt, victim);
|
||||
tags->insertBlock(addr, is_secure, pkt->req->masterId(),
|
||||
pkt->req->taskId(), victim);
|
||||
|
||||
return victim;
|
||||
}
|
||||
|
||||
18
src/mem/cache/tags/base.cc
vendored
18
src/mem/cache/tags/base.cc
vendored
@@ -52,7 +52,6 @@
|
||||
|
||||
#include "base/types.hh"
|
||||
#include "mem/cache/base.hh"
|
||||
#include "mem/packet.hh"
|
||||
#include "mem/request.hh"
|
||||
#include "sim/core.hh"
|
||||
#include "sim/sim_exit.hh"
|
||||
@@ -80,25 +79,22 @@ BaseTags::setCache(BaseCache *_cache)
|
||||
}
|
||||
|
||||
void
|
||||
BaseTags::insertBlock(const PacketPtr pkt, CacheBlk *blk)
|
||||
BaseTags::insertBlock(const Addr addr, const bool is_secure,
|
||||
const int src_master_ID, const uint32_t task_ID,
|
||||
CacheBlk *blk)
|
||||
{
|
||||
assert(!blk->isValid());
|
||||
|
||||
// Get address
|
||||
Addr addr = pkt->getAddr();
|
||||
|
||||
// Previous block, if existed, has been removed, and now we have
|
||||
// to insert the new one
|
||||
|
||||
// Deal with what we are bringing in
|
||||
MasterID master_id = pkt->req->masterId();
|
||||
assert(master_id < cache->system->maxMasters());
|
||||
occupancies[master_id]++;
|
||||
assert(src_master_ID < cache->system->maxMasters());
|
||||
occupancies[src_master_ID]++;
|
||||
|
||||
// Insert block with tag, src master id and task id
|
||||
blk->insert(extractTag(addr), pkt->isSecure(), master_id,
|
||||
pkt->req->taskId());
|
||||
blk->insert(extractTag(addr), is_secure, src_master_ID, task_ID);
|
||||
|
||||
// Check if cache warm up is done
|
||||
if (!warmedUp && tagsInUse.value() >= warmupBound) {
|
||||
warmedUp = true;
|
||||
warmupCycle = curTick();
|
||||
|
||||
10
src/mem/cache/tags/base.hh
vendored
10
src/mem/cache/tags/base.hh
vendored
@@ -58,7 +58,6 @@
|
||||
#include "base/statistics.hh"
|
||||
#include "base/types.hh"
|
||||
#include "mem/cache/blk.hh"
|
||||
#include "mem/packet.hh"
|
||||
#include "params/BaseTags.hh"
|
||||
#include "sim/clocked_object.hh"
|
||||
|
||||
@@ -285,10 +284,15 @@ class BaseTags : public ClockedObject
|
||||
/**
|
||||
* Insert the new block into the cache and update stats.
|
||||
*
|
||||
* @param pkt Packet holding the address to update
|
||||
* @param addr Address of the block.
|
||||
* @param is_secure Whether the block is in secure space or not.
|
||||
* @param src_master_ID The source requestor ID.
|
||||
* @param task_ID The new task ID.
|
||||
* @param blk The block to update.
|
||||
*/
|
||||
virtual void insertBlock(const PacketPtr pkt, CacheBlk *blk);
|
||||
virtual void insertBlock(const Addr addr, const bool is_secure,
|
||||
const int src_master_ID, const uint32_t task_ID,
|
||||
CacheBlk *blk);
|
||||
|
||||
/**
|
||||
* Regenerate the block address.
|
||||
|
||||
12
src/mem/cache/tags/base_set_assoc.hh
vendored
12
src/mem/cache/tags/base_set_assoc.hh
vendored
@@ -60,7 +60,6 @@
|
||||
#include "mem/cache/replacement_policies/base.hh"
|
||||
#include "mem/cache/tags/base.hh"
|
||||
#include "mem/cache/tags/cacheset.hh"
|
||||
#include "mem/packet.hh"
|
||||
#include "params/BaseSetAssoc.hh"
|
||||
|
||||
/**
|
||||
@@ -245,13 +244,18 @@ class BaseSetAssoc : public BaseTags
|
||||
/**
|
||||
* Insert the new block into the cache and update replacement data.
|
||||
*
|
||||
* @param pkt Packet holding the address to update
|
||||
* @param addr Address of the block.
|
||||
* @param is_secure Whether the block is in secure space or not.
|
||||
* @param src_master_ID The source requestor ID.
|
||||
* @param task_ID The new task ID.
|
||||
* @param blk The block to update.
|
||||
*/
|
||||
void insertBlock(const PacketPtr pkt, CacheBlk *blk) override
|
||||
void insertBlock(const Addr addr, const bool is_secure,
|
||||
const int src_master_ID, const uint32_t task_ID,
|
||||
CacheBlk *blk) override
|
||||
{
|
||||
// Insert block
|
||||
BaseTags::insertBlock(pkt, blk);
|
||||
BaseTags::insertBlock(addr, is_secure, src_master_ID, task_ID, blk);
|
||||
|
||||
// Increment tag counter
|
||||
tagsInUse++;
|
||||
|
||||
6
src/mem/cache/tags/fa_lru.cc
vendored
6
src/mem/cache/tags/fa_lru.cc
vendored
@@ -208,7 +208,9 @@ FALRU::findVictim(Addr addr, const bool is_secure,
|
||||
}
|
||||
|
||||
void
|
||||
FALRU::insertBlock(const PacketPtr pkt, CacheBlk *blk)
|
||||
FALRU::insertBlock(const Addr addr, const bool is_secure,
|
||||
const int src_master_ID, const uint32_t task_ID,
|
||||
CacheBlk *blk)
|
||||
{
|
||||
FALRUBlk* falruBlk = static_cast<FALRUBlk*>(blk);
|
||||
|
||||
@@ -216,7 +218,7 @@ FALRU::insertBlock(const PacketPtr pkt, CacheBlk *blk)
|
||||
assert(falruBlk->inCachesMask == 0);
|
||||
|
||||
// Do common block insertion functionality
|
||||
BaseTags::insertBlock(pkt, blk);
|
||||
BaseTags::insertBlock(addr, is_secure, src_master_ID, task_ID, blk);
|
||||
|
||||
// Increment tag counter
|
||||
tagsInUse++;
|
||||
|
||||
10
src/mem/cache/tags/fa_lru.hh
vendored
10
src/mem/cache/tags/fa_lru.hh
vendored
@@ -62,7 +62,6 @@
|
||||
#include "base/types.hh"
|
||||
#include "mem/cache/blk.hh"
|
||||
#include "mem/cache/tags/base.hh"
|
||||
#include "mem/packet.hh"
|
||||
#include "params/FALRU.hh"
|
||||
|
||||
// Uncomment to enable sanity checks for the FALRU cache and the
|
||||
@@ -214,10 +213,15 @@ class FALRU : public BaseTags
|
||||
/**
|
||||
* Insert the new block into the cache and update replacement data.
|
||||
*
|
||||
* @param pkt Packet holding the address to update
|
||||
* @param addr Address of the block.
|
||||
* @param is_secure Whether the block is in secure space or not.
|
||||
* @param src_master_ID The source requestor ID.
|
||||
* @param task_ID The new task ID.
|
||||
* @param blk The block to update.
|
||||
*/
|
||||
void insertBlock(const PacketPtr pkt, CacheBlk *blk) override;
|
||||
void insertBlock(const Addr addr, const bool is_secure,
|
||||
const int src_master_ID, const uint32_t task_ID,
|
||||
CacheBlk *blk) override;
|
||||
|
||||
/**
|
||||
* Generate the tag from the addres. For fully associative this is just the
|
||||
|
||||
8
src/mem/cache/tags/sector_tags.cc
vendored
8
src/mem/cache/tags/sector_tags.cc
vendored
@@ -194,10 +194,12 @@ SectorTags::getPossibleLocations(Addr addr) const
|
||||
}
|
||||
|
||||
void
|
||||
SectorTags::insertBlock(const PacketPtr pkt, CacheBlk *blk)
|
||||
SectorTags::insertBlock(const Addr addr, const bool is_secure,
|
||||
const int src_master_ID, const uint32_t task_ID,
|
||||
CacheBlk *blk)
|
||||
{
|
||||
// Insert block
|
||||
BaseTags::insertBlock(pkt, blk);
|
||||
// Do common block insertion functionality
|
||||
BaseTags::insertBlock(addr, is_secure, src_master_ID, task_ID, blk);
|
||||
|
||||
// Get block's sector
|
||||
SectorSubBlk* sub_blk = static_cast<SectorSubBlk*>(blk);
|
||||
|
||||
10
src/mem/cache/tags/sector_tags.hh
vendored
10
src/mem/cache/tags/sector_tags.hh
vendored
@@ -41,7 +41,6 @@
|
||||
|
||||
#include "mem/cache/sector_blk.hh"
|
||||
#include "mem/cache/tags/base.hh"
|
||||
#include "mem/packet.hh"
|
||||
#include "params/SectorTags.hh"
|
||||
|
||||
class BaseReplacementPolicy;
|
||||
@@ -150,10 +149,15 @@ class SectorTags : public BaseTags
|
||||
/**
|
||||
* Insert the new block into the cache and update replacement data.
|
||||
*
|
||||
* @param pkt Packet holding the address to update
|
||||
* @param addr Address of the block.
|
||||
* @param is_secure Whether the block is in secure space or not.
|
||||
* @param src_master_ID The source requestor ID.
|
||||
* @param task_ID The new task ID.
|
||||
* @param blk The block to update.
|
||||
*/
|
||||
void insertBlock(const PacketPtr pkt, CacheBlk *blk) override;
|
||||
void insertBlock(const Addr addr, const bool is_secure,
|
||||
const int src_master_ID, const uint32_t task_ID,
|
||||
CacheBlk *blk) override;
|
||||
|
||||
/**
|
||||
* Finds the given address in the cache, do not update replacement data.
|
||||
|
||||
Reference in New Issue
Block a user