From 937241101fae2cd0755c43c33bab2537b47596a2 Mon Sep 17 00:00:00 2001 From: Maryam Babaie Date: Tue, 20 Oct 2020 09:04:04 -0700 Subject: [PATCH] mem-cache, stats: Stats update for snoop filter Change-Id: I339bbc4268d5b9501421a2a6a76e5267422c87aa Signed-off-by: Maryam Babaie Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/36355 Reviewed-by: Bobby R. Bruce Maintainer: Bobby R. Bruce Tested-by: kokoro --- src/mem/snoop_filter.cc | 58 +++++++++++++++++------------------------ src/mem/snoop_filter.hh | 19 +++++++++----- 2 files changed, 36 insertions(+), 41 deletions(-) diff --git a/src/mem/snoop_filter.cc b/src/mem/snoop_filter.cc index 7ced30c51..d799707ed 100644 --- a/src/mem/snoop_filter.cc +++ b/src/mem/snoop_filter.cc @@ -97,12 +97,12 @@ SnoopFilter::lookupRequest(const Packet* cpkt, const ResponsePort& // updateRequest. reqLookupResult.retryItem = sf_item; - totRequests++; + stats.totRequests++; if (is_hit) { if (interested.count() == 1) - hitSingleRequests++; + stats.hitSingleRequests++; else - hitMultiRequests++; + stats.hitMultiRequests++; } DPRINTF(SnoopFilter, "%s: SF value %x.%x\n", @@ -207,12 +207,12 @@ SnoopFilter::lookupSnoop(const Packet* cpkt) SnoopMask interested = (sf_item.holder | sf_item.requested); - totSnoops++; + stats.totSnoops++; if (interested.count() == 1) - hitSingleSnoops++; + stats.hitSingleSnoops++; else - hitMultiSnoops++; + stats.hitMultiSnoops++; // ReadEx and Writes require both invalidation and exlusivity, while reads // require neither. Writebacks on the other hand require exclusivity but @@ -387,36 +387,26 @@ SnoopFilter::updateResponse(const Packet* cpkt, const ResponsePort& __func__, sf_item.requested, sf_item.holder); } +SnoopFilter::SnoopFilterStats::SnoopFilterStats(Stats::Group *parent): +Stats::Group(parent), +ADD_STAT(totRequests,"Total number of requests made to the snoop filter."), +ADD_STAT(hitSingleRequests, + "Number of requests hitting in the snoop filter with a single "\ + "holder of the requested data."), +ADD_STAT(hitMultiRequests, + "Number of requests hitting in the snoop filter with multiple "\ + "(>1) holders of the requested data."), +ADD_STAT(totSnoops,"Total number of snoops made to the snoop filter."), +ADD_STAT(hitSingleSnoops, + "Number of snoops hitting in the snoop filter with a single "\ + "holder of the requested data."), +ADD_STAT(hitMultiSnoops, + "Number of snoops hitting in the snoop filter with multiple "\ + "(>1) holders of the requested data.") +{} + void SnoopFilter::regStats() { SimObject::regStats(); - - totRequests - .name(name() + ".tot_requests") - .desc("Total number of requests made to the snoop filter."); - - hitSingleRequests - .name(name() + ".hit_single_requests") - .desc("Number of requests hitting in the snoop filter with a single "\ - "holder of the requested data."); - - hitMultiRequests - .name(name() + ".hit_multi_requests") - .desc("Number of requests hitting in the snoop filter with multiple "\ - "(>1) holders of the requested data."); - - totSnoops - .name(name() + ".tot_snoops") - .desc("Total number of snoops made to the snoop filter."); - - hitSingleSnoops - .name(name() + ".hit_single_snoops") - .desc("Number of snoops hitting in the snoop filter with a single "\ - "holder of the requested data."); - - hitMultiSnoops - .name(name() + ".hit_multi_snoops") - .desc("Number of snoops hitting in the snoop filter with multiple "\ - "(>1) holders of the requested data."); } diff --git a/src/mem/snoop_filter.hh b/src/mem/snoop_filter.hh index 815049435..abd66a8fb 100644 --- a/src/mem/snoop_filter.hh +++ b/src/mem/snoop_filter.hh @@ -94,7 +94,8 @@ class SnoopFilter : public SimObject { SnoopFilter (const SnoopFilterParams &p) : SimObject(p), reqLookupResult(cachedLocations.end()), linesize(p.system->cacheLineSize()), lookupLatency(p.lookup_latency), - maxEntryCount(p.max_capacity / p.system->cacheLineSize()) + maxEntryCount(p.max_capacity / p.system->cacheLineSize()), + stats(this) { } @@ -310,13 +311,17 @@ class SnoopFilter : public SimObject { }; /** Statistics */ - Stats::Scalar totRequests; - Stats::Scalar hitSingleRequests; - Stats::Scalar hitMultiRequests; + struct SnoopFilterStats : public Stats::Group { + SnoopFilterStats(Stats::Group *parent); - Stats::Scalar totSnoops; - Stats::Scalar hitSingleSnoops; - Stats::Scalar hitMultiSnoops; + Stats::Scalar totRequests; + Stats::Scalar hitSingleRequests; + Stats::Scalar hitMultiRequests; + + Stats::Scalar totSnoops; + Stats::Scalar hitSingleSnoops; + Stats::Scalar hitMultiSnoops; + } stats; }; inline SnoopFilter::SnoopMask -- 2.30.2