X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmem%2Fcache%2Ftags%2Fbase.cc;h=8b52b746eaa2809080b0acba1331219a8acd15fd;hb=a66fe6a8c36c9ab49cb3a35065bfc645d51036c8;hp=947bd05dedeb74340237f16b14a71759696bf21d;hpb=19a5b68db7d73542833d94ec8b23cad6daf0a787;p=gem5.git diff --git a/src/mem/cache/tags/base.cc b/src/mem/cache/tags/base.cc index 947bd05de..8b52b746e 100644 --- a/src/mem/cache/tags/base.cc +++ b/src/mem/cache/tags/base.cc @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013 ARM Limited + * Copyright (c) 2013,2016 ARM Limited * All rights reserved. * * The license below extends only to copyright in the software and shall @@ -46,30 +46,41 @@ * Definitions of BaseTags. */ -#include "config/the_isa.hh" -#include "cpu/smt.hh" //maxThreadsPerCPU #include "mem/cache/tags/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), size(p->size), - hitLatency(p->hit_latency) + : 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; } void BaseTags::regStats() { + ClockedObject::regStats(); + using namespace Stats; + replacements .init(maxThreadsPerCPU) .name(name() + ".replacements") @@ -125,5 +136,38 @@ BaseTags::regStats() 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)); }