[gem5-dev] Change in gem5/gem5[master]: mem-cache: Determine if an MSHR has requests from another cache
Nikos Nikoleris has submitted this change and it was merged. ( https://gem5-review.googlesource.com/10422 ) Change subject: mem-cache: Determine if an MSHR has requests from another cache .. mem-cache: Determine if an MSHR has requests from another cache To decide whether we allocate upon receiving a response we need to determine if any of the currently serviced requests (non-deferred targets) is comming from another cache. This change adds support for tracking this information in the MSHR. Change-Id: If1db93c12b6af5813b91b9d6b6e5e196d327f038 Reviewed-on: https://gem5-review.googlesource.com/10422 Reviewed-by: Jason Lowe-Power Maintainer: Nikos Nikoleris --- M src/mem/cache/cache.cc M src/mem/cache/mshr.cc M src/mem/cache/mshr.hh 3 files changed, 33 insertions(+), 11 deletions(-) Approvals: Jason Lowe-Power: Looks good to me, approved Nikos Nikoleris: Looks good to me, approved diff --git a/src/mem/cache/cache.cc b/src/mem/cache/cache.cc index 73c7e19..e9aec49 100644 --- a/src/mem/cache/cache.cc +++ b/src/mem/cache/cache.cc @@ -1415,7 +1415,6 @@ // First offset for critical word first calculations int initial_offset = initial_tgt->pkt->getOffset(blkSize); -bool from_cache = false; MSHR::TargetList targets = mshr->extractServiceableTargets(pkt); for (auto &target: targets) { Packet *tgt_pkt = target.pkt; @@ -1437,10 +1436,6 @@ break; // skip response } -// keep track of whether we have responded to another -// cache -from_cache = from_cache || tgt_pkt->fromCache(); - // unlike the other packet flows, where data is found in other // caches or memory and brought back, write-line requests always // have the data right away, so the above check for "is fill?" @@ -1572,7 +1567,7 @@ } } -maintainClusivity(from_cache, blk); +maintainClusivity(targets.hasFromCache, blk); if (blk && blk->isValid()) { // an invalidate response stemming from a write line request diff --git a/src/mem/cache/mshr.cc b/src/mem/cache/mshr.cc index cc26b56..4f170e6 100644 --- a/src/mem/cache/mshr.cc +++ b/src/mem/cache/mshr.cc @@ -68,7 +68,8 @@ } MSHR::TargetList::TargetList() -: needsWritable(false), hasUpgrade(false), allocOnFill(false) +: needsWritable(false), hasUpgrade(false), allocOnFill(false), + hasFromCache(false) {} @@ -91,6 +92,10 @@ // potentially re-evaluate whether we should allocate on a fill or // not allocOnFill = allocOnFill || alloc_on_fill; + +if (source != Target::FromPrefetcher) { +hasFromCache = hasFromCache || pkt->fromCache(); +} } } @@ -590,7 +595,7 @@ void MSHR::print(std::ostream &os, int verbosity, const std::string &prefix) const { -ccprintf(os, "%s[%#llx:%#llx](%s) %s %s %s state: %s %s %s %s %s\n", +ccprintf(os, "%s[%#llx:%#llx](%s) %s %s %s state: %s %s %s %s %s %s\n", prefix, blkAddr, blkAddr + blkSize - 1, isSecure ? "s" : "ns", isForward ? "Forward" : "", @@ -600,7 +605,8 @@ inService ? "InSvc" : "", downstreamPending ? "DwnPend" : "", postInvalidate ? "PostInv" : "", - postDowngrade ? "PostDowngr" : ""); + postDowngrade ? "PostDowngr" : "", + hasFromCache() ? "HasFromCache" : ""); if (!targets.empty()) { ccprintf(os, "%s Targets:\n", prefix); diff --git a/src/mem/cache/mshr.hh b/src/mem/cache/mshr.hh index 5fe0fb9..b4bf33a 100644 --- a/src/mem/cache/mshr.hh +++ b/src/mem/cache/mshr.hh @@ -162,6 +162,11 @@ bool hasUpgrade; /** Set when the response should allocate on fill */ bool allocOnFill; +/** + * Determine whether there was at least one non-snooping + * target coming from another cache. + */ +bool hasFromCache; TargetList(); @@ -176,7 +181,12 @@ void updateFlags(PacketPtr pkt, Target::Source source, bool alloc_on_fill); -void resetFlags() { needsWritable = hasUpgrade = allocOnFill = false; } +void resetFlags() { +needsWritable = false; +hasUpgrade = false; +allocOnFill = false; +hasFromCache = false; +} /** * Goes through the list of targets and uses them to populate @@ -191,7 +201,8 @@ * values. */ bool isReset() const { -return !needsWritable && !hasUpgrade && !allocOnFill; +return !needsWritable && !hasUpgrade && !allocOnFill && +!hasFromCache; } /** @@ -257,6 +268,16 @@ bool allocOnFill() const { return targets.allocOnFill; } + +/** + * Determine if there are non-deferred requests from oth
[gem5-dev] Change in gem5/gem5[master]: mem-cache: Determine if an MSHR has requests from another cache
Hello Jason Lowe-Power, Daniel Carvalho, I'd like you to reexamine a change. Please visit https://gem5-review.googlesource.com/10422 to look at the new patch set (#3). Change subject: mem-cache: Determine if an MSHR has requests from another cache .. mem-cache: Determine if an MSHR has requests from another cache To decide whether we allocate upon receiving a response we need to determine if any of the currently serviced requests (non-deferred targets) is comming from another cache. This change adds support for tracking this information in the MSHR. Change-Id: If1db93c12b6af5813b91b9d6b6e5e196d327f038 --- M src/mem/cache/cache.cc M src/mem/cache/mshr.cc M src/mem/cache/mshr.hh 3 files changed, 33 insertions(+), 11 deletions(-) -- To view, visit https://gem5-review.googlesource.com/10422 To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings Gerrit-Project: public/gem5 Gerrit-Branch: master Gerrit-Change-Id: If1db93c12b6af5813b91b9d6b6e5e196d327f038 Gerrit-Change-Number: 10422 Gerrit-PatchSet: 3 Gerrit-Owner: Nikos Nikoleris Gerrit-Reviewer: Daniel Carvalho Gerrit-Reviewer: Jason Lowe-Power Gerrit-Reviewer: Nikos Nikoleris Gerrit-MessageType: newpatchset ___ gem5-dev mailing list gem5-dev@gem5.org http://m5sim.org/mailman/listinfo/gem5-dev
[gem5-dev] Change in gem5/gem5[master]: mem-cache: Determine if an MSHR has requests from another cache
Hello Daniel Carvalho, I'd like you to reexamine a change. Please visit https://gem5-review.googlesource.com/10422 to look at the new patch set (#2). Change subject: mem-cache: Determine if an MSHR has requests from another cache .. mem-cache: Determine if an MSHR has requests from another cache To decide whether we allocate upon receiving a response we need to determine if any of the currently serviced requests (non-deferred targets) is comming from another cache. This change adds support for tracking this information in the MSHR. Change-Id: If1db93c12b6af5813b91b9d6b6e5e196d327f038 --- M src/mem/cache/cache.cc M src/mem/cache/mshr.cc M src/mem/cache/mshr.hh 3 files changed, 30 insertions(+), 11 deletions(-) -- To view, visit https://gem5-review.googlesource.com/10422 To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings Gerrit-Project: public/gem5 Gerrit-Branch: master Gerrit-Change-Id: If1db93c12b6af5813b91b9d6b6e5e196d327f038 Gerrit-Change-Number: 10422 Gerrit-PatchSet: 2 Gerrit-Owner: Nikos Nikoleris Gerrit-Reviewer: Daniel Carvalho Gerrit-Reviewer: Nikos Nikoleris Gerrit-MessageType: newpatchset ___ gem5-dev mailing list gem5-dev@gem5.org http://m5sim.org/mailman/listinfo/gem5-dev
[gem5-dev] Change in gem5/gem5[master]: mem-cache: Determine if an MSHR has requests from another cache
Nikos Nikoleris has uploaded this change for review. ( https://gem5-review.googlesource.com/10422 Change subject: mem-cache: Determine if an MSHR has requests from another cache .. mem-cache: Determine if an MSHR has requests from another cache To decide whether we allocate upon receiving a response we need to determine if any of the currently serviced requests (non-deferred targets) is comming from another cache. This change adds support for tracking this information in the MSHR. Change-Id: If1db93c12b6af5813b91b9d6b6e5e196d327f038 --- M src/mem/cache/mshr.cc M src/mem/cache/mshr.hh 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/src/mem/cache/mshr.cc b/src/mem/cache/mshr.cc index cc26b56..14ac342 100644 --- a/src/mem/cache/mshr.cc +++ b/src/mem/cache/mshr.cc @@ -68,7 +68,8 @@ } MSHR::TargetList::TargetList() -: needsWritable(false), hasUpgrade(false), allocOnFill(false) +: needsWritable(false), hasUpgrade(false), allocOnFill(false), + hasFromCache(false) {} @@ -91,6 +92,8 @@ // potentially re-evaluate whether we should allocate on a fill or // not allocOnFill = allocOnFill || alloc_on_fill; + +hasFromCache = hasFromCache || pkt->fromCache(); } } @@ -590,7 +593,7 @@ void MSHR::print(std::ostream &os, int verbosity, const std::string &prefix) const { -ccprintf(os, "%s[%#llx:%#llx](%s) %s %s %s state: %s %s %s %s %s\n", +ccprintf(os, "%s[%#llx:%#llx](%s) %s %s %s state: %s %s %s %s %s %s\n", prefix, blkAddr, blkAddr + blkSize - 1, isSecure ? "s" : "ns", isForward ? "Forward" : "", @@ -600,7 +603,8 @@ inService ? "InSvc" : "", downstreamPending ? "DwnPend" : "", postInvalidate ? "PostInv" : "", - postDowngrade ? "PostDowngr" : ""); + postDowngrade ? "PostDowngr" : "", + hasFromCache() ? "HasFromCache" : ""); if (!targets.empty()) { ccprintf(os, "%s Targets:\n", prefix); diff --git a/src/mem/cache/mshr.hh b/src/mem/cache/mshr.hh index 5fe0fb9..2894482 100644 --- a/src/mem/cache/mshr.hh +++ b/src/mem/cache/mshr.hh @@ -162,6 +162,11 @@ bool hasUpgrade; /** Set when the response should allocate on fill */ bool allocOnFill; +/** + * Determine whether there was at least one non-snooping + * target coming from another cache. + */ +bool hasFromCache; TargetList(); @@ -176,7 +181,12 @@ void updateFlags(PacketPtr pkt, Target::Source source, bool alloc_on_fill); -void resetFlags() { needsWritable = hasUpgrade = allocOnFill = false; } +void resetFlags() { +needsWritable = false; +hasUpgrade = false; +allocOnFill = false; +hasFromCache = false; +} /** * Goes through the list of targets and uses them to populate @@ -191,7 +201,8 @@ * values. */ bool isReset() const { -return !needsWritable && !hasUpgrade && !allocOnFill; +return !needsWritable && !hasUpgrade && !allocOnFill && +!hasFromCache; } /** @@ -257,6 +268,15 @@ bool allocOnFill() const { return targets.allocOnFill; } + +/** + * Determine if there are non-deferred requests from other caches + * + * @return true if any of the targets is from another cache + */ +bool hasFromCache() const { +return targets.hasFromCache; +} private: /** -- To view, visit https://gem5-review.googlesource.com/10422 To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings Gerrit-Project: public/gem5 Gerrit-Branch: master Gerrit-Change-Id: If1db93c12b6af5813b91b9d6b6e5e196d327f038 Gerrit-Change-Number: 10422 Gerrit-PatchSet: 1 Gerrit-Owner: Nikos Nikoleris Gerrit-MessageType: newchange ___ gem5-dev mailing list gem5-dev@gem5.org http://m5sim.org/mailman/listinfo/gem5-dev