mem-cache, stats: Stats update for snoop filter

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>
This commit is contained in:
Maryam Babaie
2020-10-20 09:04:04 -07:00
parent 6cbacfbc49
commit 937241101f
2 changed files with 36 additions and 41 deletions

View 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.");
}

View 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