mem-cache, stats: Stats update for snoop filter
authorMaryam Babaie <mbabaie@ucdavis.edu>
Tue, 20 Oct 2020 16:04:04 +0000 (09:04 -0700)
committerMaryam Babaie <mbabaie@ucdavis.edu>
Tue, 24 Nov 2020 06:54:08 +0000 (06:54 +0000)
Change-Id: I339bbc4268d5b9501421a2a6a76e5267422c87aa
Signed-off-by: Maryam Babaie <mbabaie@ucdavis.edu>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/36355
Reviewed-by: Bobby R. Bruce <bbruce@ucdavis.edu>
Maintainer: Bobby R. Bruce <bbruce@ucdavis.edu>
Tested-by: kokoro <noreply+kokoro@google.com>
src/mem/snoop_filter.cc
src/mem/snoop_filter.hh

index 7ced30c51168b52500033d5986efd922c91f7f6d..d799707edbe92b266e7623ce1e5ceec572360c35 100644 (file)
@@ -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.");
 }
index 815049435d4fe74db9549e89e27169df8139865a..abd66a8fba30e708b4c2fb447f8046d0357a9f0b 100644 (file)
@@ -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