Hi Sherif and Arth,

I had a similar problem. I resolved it by coming up with a somewhat hacky 
solution that utilizes the “forEachBlk” function call in the base tags. For 
context, I needed the main memory state to be consistent between a task running 
some component on both big and little CPU clusters in the ARM bigLITTLE 
configurations, so a lazy eviction protocol (such as invalidating cache blocks) 
wasn’t sufficient.

In src/mem/cache/tags/base.cc <http://base.cc/>, add the following public 
function.

void
BaseTags::flushAll(const char *parentName)
{
        auto blk_flush = [&parentName](CacheBlk &blk) {
                Cache *parent = 
dynamic_cast<Cache*>(SimObject::find(parentName));
                if (blk.isValid() && blk.isDirty()) {
                        parent->evictBlk(&blk);
                }
        };
        forEachBlk(blk_flush);
}

Then, in src/mem/cache.cc <http://cache.cc/>, you can add

void
Cache::flush()
{
        tags->flushAll(name().c_str());
}

As you can tell, this is a very quick and dirty solution, so if there exists a 
better way to do this, I would also greatly appreciate and benefit from it!

Best,
Sam

> On Mar 29, 2021, at 12:46 PM, ARTHUR PERAIS via gem5-users 
> <gem5-users@gem5.org> wrote:
> 
> Hi Sherif,
> 
> Maybe the functionality is already there, but it may not be as easy as it 
> sounds depending on what you mean by "flushing". Functionally invalidating 
> cache lines is staightforward, but anything that is dirty in the cache should 
> be written back, and this may be harder to handle especially if you want 
> timing, not just functionality. If I had to start somewhere, I would see how 
> back invalidations are handled (invalidation of L1 line because line is 
> evicted from L2 and L2 is inclusive of L1) and apply the same process on 
> dirty line sequentially.ur
> 
> Maybe more context would be helpful :)
> 
> Arth
> 
> De: "gem5 users mailing list" <gem5-users@gem5.org>
> À: "gem5 users mailing list" <gem5-users@gem5.org>
> Cc: "Sherif AbdelFadil" <sherif.m.fa...@gmail.com>
> Envoyé: Lundi 29 Mars 2021 10:45:12
> Objet: [gem5-users] Flushing the Caches
> 
> Hi,
> I was wondering if someone already implemented the functionality of flushing 
> all caches in gem5. It seems relatively simple to implement and I imagine it 
> would be useful in a lot of cases, yet I couldn't find anything online.
> 
> Regards,
> Sherif
> 
> _______________________________________________
> gem5-users mailing list -- gem5-users@gem5.org
> To unsubscribe send an email to gem5-users-le...@gem5.org
> %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
> _______________________________________________
> gem5-users mailing list -- gem5-users@gem5.org
> To unsubscribe send an email to gem5-users-le...@gem5.org
> %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

_______________________________________________
gem5-users mailing list -- gem5-users@gem5.org
To unsubscribe send an email to gem5-users-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

Reply via email to