X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmem%2Fcache%2Ftags%2Fbase.cc;h=8b52b746eaa2809080b0acba1331219a8acd15fd;hb=a66fe6a8c36c9ab49cb3a35065bfc645d51036c8;hp=e18026a21d957399e63eb3798176857dee85079e;hpb=9d7a69c582e87a2d461298fb32345686efe4113f;p=gem5.git diff --git a/src/mem/cache/tags/base.cc b/src/mem/cache/tags/base.cc index e18026a21..8b52b746e 100644 --- a/src/mem/cache/tags/base.cc +++ b/src/mem/cache/tags/base.cc @@ -1,4 +1,16 @@ /* + * Copyright (c) 2013,2016 ARM Limited + * All rights reserved. + * + * The license below extends only to copyright in the software and shall + * not be construed as granting a license to any other intellectual + * property including but not limited to intellectual property relating + * to a hardware implementation of the functionality of the software + * licensed hereunder. You may use the software subject to the license + * terms below provided that you ensure that this notice is replicated + * unmodified and in its entirety in all distributions of the software, + * modified or unmodified, in source code or in binary form. + * * Copyright (c) 2003-2005 The Regents of The University of Michigan * All rights reserved. * @@ -36,56 +48,126 @@ #include "mem/cache/tags/base.hh" -#include "mem/cache/base.hh" #include "cpu/smt.hh" //maxThreadsPerCPU +#include "mem/cache/base.hh" #include "sim/sim_exit.hh" using namespace std; +BaseTags::BaseTags(const Params *p) + : ClockedObject(p), blkSize(p->block_size), blkMask(blkSize - 1), + size(p->size), + lookupLatency(p->tag_latency), + accessLatency(p->sequential_access ? + p->tag_latency + p->data_latency : + std::max(p->tag_latency, p->data_latency)), + cache(nullptr), + warmupBound((p->warmup_percentage/100.0) * (p->size / p->block_size)), + warmedUp(false), numBlocks(p->size / p->block_size) +{ +} + void BaseTags::setCache(BaseCache *_cache) { + assert(!cache); cache = _cache; - objName = cache->name(); } void -BaseTags::regStats(const string &name) +BaseTags::regStats() { + ClockedObject::regStats(); + using namespace Stats; + replacements .init(maxThreadsPerCPU) - .name(name + ".replacements") + .name(name() + ".replacements") .desc("number of replacements") .flags(total) ; tagsInUse - .name(name + ".tagsinuse") + .name(name() + ".tagsinuse") .desc("Cycle average of tags in use") ; totalRefs - .name(name + ".total_refs") + .name(name() + ".total_refs") .desc("Total number of references to valid blocks.") ; sampledRefs - .name(name + ".sampled_refs") + .name(name() + ".sampled_refs") .desc("Sample count of references to valid blocks.") ; avgRefs - .name(name + ".avg_refs") + .name(name() + ".avg_refs") .desc("Average number of references to valid blocks.") ; avgRefs = totalRefs/sampledRefs; warmupCycle - .name(name + ".warmup_cycle") + .name(name() + ".warmup_cycle") .desc("Cycle when the warmup percentage was hit.") ; + occupancies + .init(cache->system->maxMasters()) + .name(name() + ".occ_blocks") + .desc("Average occupied blocks per requestor") + .flags(nozero | nonan) + ; + for (int i = 0; i < cache->system->maxMasters(); i++) { + occupancies.subname(i, cache->system->getMasterName(i)); + } + + avgOccs + .name(name() + ".occ_percent") + .desc("Average percentage of cache occupancy") + .flags(nozero | total) + ; + for (int i = 0; i < cache->system->maxMasters(); i++) { + avgOccs.subname(i, cache->system->getMasterName(i)); + } + + avgOccs = occupancies / Stats::constant(numBlocks); + + occupanciesTaskId + .init(ContextSwitchTaskId::NumTaskId) + .name(name() + ".occ_task_id_blocks") + .desc("Occupied blocks per task id") + .flags(nozero | nonan) + ; + + ageTaskId + .init(ContextSwitchTaskId::NumTaskId, 5) + .name(name() + ".age_task_id_blocks") + .desc("Occupied blocks per task id") + .flags(nozero | nonan) + ; + + percentOccsTaskId + .name(name() + ".occ_task_id_percent") + .desc("Percentage of cache occupancy per task id") + .flags(nozero) + ; + + percentOccsTaskId = occupanciesTaskId / Stats::constant(numBlocks); + + tagAccesses + .name(name() + ".tag_accesses") + .desc("Number of tag accesses") + ; + + dataAccesses + .name(name() + ".data_accesses") + .desc("Number of data accesses") + ; + + registerDumpCallback(new BaseTagsDumpCallback(this)); registerExitCallback(new BaseTagsCallback(this)); }