From 86a54d91936b524c0ef0f282959f0fc29bafe7eb Mon Sep 17 00:00:00 2001 From: "Daniel R. Carvalho" Date: Thu, 7 Jun 2018 12:19:27 +0200 Subject: [PATCH] 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 Reviewed-by: Nikos Nikoleris Maintainer: Jason Lowe-Power --- src/mem/cache/base.cc | 3 ++- src/mem/cache/tags/base.cc | 18 +++++++----------- src/mem/cache/tags/base.hh | 10 +++++++--- src/mem/cache/tags/base_set_assoc.hh | 12 ++++++++---- src/mem/cache/tags/fa_lru.cc | 6 ++++-- src/mem/cache/tags/fa_lru.hh | 10 +++++++--- src/mem/cache/tags/sector_tags.cc | 8 +++++--- src/mem/cache/tags/sector_tags.hh | 10 +++++++--- 8 files changed, 47 insertions(+), 30 deletions(-) diff --git a/src/mem/cache/base.cc b/src/mem/cache/base.cc index a0614100f..6c79fd683 100644 --- a/src/mem/cache/base.cc +++ b/src/mem/cache/base.cc @@ -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; } diff --git a/src/mem/cache/tags/base.cc b/src/mem/cache/tags/base.cc index 9548d491a..7f848e0d8 100644 --- a/src/mem/cache/tags/base.cc +++ b/src/mem/cache/tags/base.cc @@ -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(); diff --git a/src/mem/cache/tags/base.hh b/src/mem/cache/tags/base.hh index 9a9de8cfa..30a7af72c 100644 --- a/src/mem/cache/tags/base.hh +++ b/src/mem/cache/tags/base.hh @@ -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. diff --git a/src/mem/cache/tags/base_set_assoc.hh b/src/mem/cache/tags/base_set_assoc.hh index 8e4657fc1..dc0e04275 100644 --- a/src/mem/cache/tags/base_set_assoc.hh +++ b/src/mem/cache/tags/base_set_assoc.hh @@ -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++; diff --git a/src/mem/cache/tags/fa_lru.cc b/src/mem/cache/tags/fa_lru.cc index 51f360eb4..1b43e9892 100644 --- a/src/mem/cache/tags/fa_lru.cc +++ b/src/mem/cache/tags/fa_lru.cc @@ -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(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++; diff --git a/src/mem/cache/tags/fa_lru.hh b/src/mem/cache/tags/fa_lru.hh index 43e58040f..c8ccc66f3 100644 --- a/src/mem/cache/tags/fa_lru.hh +++ b/src/mem/cache/tags/fa_lru.hh @@ -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 diff --git a/src/mem/cache/tags/sector_tags.cc b/src/mem/cache/tags/sector_tags.cc index 33269ecc9..76034e1ea 100644 --- a/src/mem/cache/tags/sector_tags.cc +++ b/src/mem/cache/tags/sector_tags.cc @@ -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(blk); diff --git a/src/mem/cache/tags/sector_tags.hh b/src/mem/cache/tags/sector_tags.hh index c0dae8dd4..109b9832b 100644 --- a/src/mem/cache/tags/sector_tags.hh +++ b/src/mem/cache/tags/sector_tags.hh @@ -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. -- 2.30.2