changeset 9fc3475e8175 in /z/repo/m5
details: http://repo.m5sim.org/m5?cmd=changeset;node=9fc3475e8175
description:
MOESI_hammer: break down miss latency stalled cycles
This patch tracks the number of cycles a transaction is delayed at
different
points of the request-forward-response loop.
diffstat:
src/mem/protocol/MOESI_hammer-cache.sm | 47 +++++++++++++++-
src/mem/protocol/MOESI_hammer-dir.sm | 8 ++
src/mem/protocol/MOESI_hammer-msg.sm | 4 +
src/mem/protocol/RubySlicc_Types.sm | 2 +
src/mem/ruby/profiler/Profiler.cc | 99 ++++++++++++++++++++++++++++++++++
src/mem/ruby/profiler/Profiler.hh | 24 ++++++++
src/mem/ruby/system/Sequencer.cc | 49 +++++++++++++++-
src/mem/ruby/system/Sequencer.hh | 19 ++++++-
8 files changed, 245 insertions(+), 7 deletions(-)
diffs (truncated from 515 to 300 lines):
diff -r 3559d47839a1 -r 9fc3475e8175 src/mem/protocol/MOESI_hammer-cache.sm
--- a/src/mem/protocol/MOESI_hammer-cache.sm Fri Aug 20 11:46:14 2010 -0700
+++ b/src/mem/protocol/MOESI_hammer-cache.sm Fri Aug 20 11:46:14 2010 -0700
@@ -136,6 +136,9 @@
int NumPendingMsgs, desc="Number of acks/data messages that this
processor is waiting for";
bool Sharers, desc="On a GetS, did we find any other sharers in
the system";
MachineID LastResponder, desc="last machine to send a response for this
request";
+ Time InitialRequestTime, default="0", desc="time the initial requests was
sent from the L1Cache";
+ Time ForwardRequestTime, default="0", desc="time the dir forwarded the
request";
+ Time FirstResponseTime, default="0", desc="the time the first response was
received";
}
external_type(TBETable) {
@@ -424,6 +427,7 @@
out_msg.Requestor := machineID;
out_msg.Destination.add(map_Address_to_Directory(address));
out_msg.MessageSize := MessageSizeType:Request_Control;
+ out_msg.InitialRequestTime := get_time();
TBEs[address].NumPendingMsgs := machineCount(MachineType:L1Cache); //
One from each other cache (n-1) plus the memory (+1)
}
}
@@ -435,6 +439,7 @@
out_msg.Requestor := machineID;
out_msg.Destination.add(map_Address_to_Directory(address));
out_msg.MessageSize := MessageSizeType:Request_Control;
+ out_msg.InitialRequestTime := get_time();
TBEs[address].NumPendingMsgs := machineCount(MachineType:L1Cache); //
One from each other cache (n-1) plus the memory (+1)
}
}
@@ -454,6 +459,8 @@
out_msg.Acks := 2;
}
out_msg.MessageSize := MessageSizeType:Response_Data;
+ out_msg.InitialRequestTime := in_msg.InitialRequestTime;
+ out_msg.ForwardRequestTime := in_msg.ForwardRequestTime;
}
}
}
@@ -483,6 +490,8 @@
out_msg.Acks := 2;
}
out_msg.MessageSize := MessageSizeType:Response_Data;
+ out_msg.InitialRequestTime := in_msg.InitialRequestTime;
+ out_msg.ForwardRequestTime := in_msg.ForwardRequestTime;
}
}
}
@@ -503,6 +512,8 @@
out_msg.Acks := 2;
}
out_msg.MessageSize := MessageSizeType:Response_Data;
+ out_msg.InitialRequestTime := in_msg.InitialRequestTime;
+ out_msg.ForwardRequestTime := in_msg.ForwardRequestTime;
}
}
}
@@ -517,6 +528,8 @@
out_msg.Acks := 1;
assert(in_msg.DirectedProbe == false);
out_msg.MessageSize := MessageSizeType:Response_Control;
+ out_msg.InitialRequestTime := in_msg.InitialRequestTime;
+ out_msg.ForwardRequestTime := in_msg.ForwardRequestTime;
}
}
}
@@ -531,6 +544,8 @@
out_msg.Acks := 1;
assert(in_msg.DirectedProbe == false);
out_msg.MessageSize := MessageSizeType:Response_Control;
+ out_msg.InitialRequestTime := in_msg.InitialRequestTime;
+ out_msg.ForwardRequestTime := in_msg.ForwardRequestTime;
}
}
}
@@ -580,7 +595,10 @@
sequencer.readCallback(address,
getNondirectHitMachType(in_msg.Address,
in_msg.Sender),
- getCacheEntry(address).DataBlk);
+ getCacheEntry(address).DataBlk,
+ TBEs[address].InitialRequestTime,
+ TBEs[address].ForwardRequestTime,
+ TBEs[address].FirstResponseTime);
}
}
@@ -605,7 +623,10 @@
sequencer.writeCallback(address,
getNondirectHitMachType(address, in_msg.Sender),
- getCacheEntry(address).DataBlk);
+ getCacheEntry(address).DataBlk,
+ TBEs[address].InitialRequestTime,
+ TBEs[address].ForwardRequestTime,
+ TBEs[address].FirstResponseTime);
}
getCacheEntry(address).Dirty := true;
@@ -617,7 +638,10 @@
sequencer.writeCallback(address,
getNondirectHitMachType(address,
TBEs[address].LastResponder),
- getCacheEntry(address).DataBlk);
+ getCacheEntry(address).DataBlk,
+ TBEs[address].InitialRequestTime,
+ TBEs[address].ForwardRequestTime,
+ TBEs[address].FirstResponseTime);
getCacheEntry(address).Dirty := true;
}
@@ -649,6 +673,21 @@
TBEs[address].NumPendingMsgs := TBEs[address].NumPendingMsgs -
in_msg.Acks;
DEBUG_EXPR(TBEs[address].NumPendingMsgs);
TBEs[address].LastResponder := in_msg.Sender;
+ if (TBEs[address].InitialRequestTime != zero_time() &&
in_msg.InitialRequestTime != zero_time()) {
+ assert(TBEs[address].InitialRequestTime == in_msg.InitialRequestTime);
+ }
+ if (in_msg.InitialRequestTime != zero_time()) {
+ TBEs[address].InitialRequestTime := in_msg.InitialRequestTime;
+ }
+ if (TBEs[address].ForwardRequestTime != zero_time() &&
in_msg.ForwardRequestTime != zero_time()) {
+ assert(TBEs[address].ForwardRequestTime == in_msg.ForwardRequestTime);
+ }
+ if (in_msg.ForwardRequestTime != zero_time()) {
+ TBEs[address].ForwardRequestTime := in_msg.ForwardRequestTime;
+ }
+ if (TBEs[address].FirstResponseTime == zero_time()) {
+ TBEs[address].FirstResponseTime := get_time();
+ }
}
}
@@ -700,6 +739,8 @@
out_msg.Acks := 2;
}
out_msg.MessageSize := MessageSizeType:Response_Data;
+ out_msg.InitialRequestTime := in_msg.InitialRequestTime;
+ out_msg.ForwardRequestTime := in_msg.ForwardRequestTime;
}
}
}
diff -r 3559d47839a1 -r 9fc3475e8175 src/mem/protocol/MOESI_hammer-dir.sm
--- a/src/mem/protocol/MOESI_hammer-dir.sm Fri Aug 20 11:46:14 2010 -0700
+++ b/src/mem/protocol/MOESI_hammer-dir.sm Fri Aug 20 11:46:14 2010 -0700
@@ -645,6 +645,8 @@
out_msg.Destination.broadcast(MachineType:L1Cache); // Send to all
L1 caches
out_msg.Destination.remove(in_msg.Requestor); // Don't include the
original requestor
out_msg.MessageSize := MessageSizeType:Broadcast_Control;
+ out_msg.InitialRequestTime := in_msg.InitialRequestTime;
+ out_msg.ForwardRequestTime := get_time();
}
}
}
@@ -685,6 +687,8 @@
out_msg.Destination.broadcast(MachineType:L1Cache); // Send to all
L1 caches
out_msg.Destination.remove(in_msg.Requestor); // Don't include the
original requestor
out_msg.MessageSize := MessageSizeType:Broadcast_Control;
+ out_msg.InitialRequestTime := in_msg.InitialRequestTime;
+ out_msg.ForwardRequestTime := get_time();
}
}
}
@@ -701,6 +705,8 @@
out_msg.Destination.add(getPfEntry(address).Owner);
out_msg.MessageSize := MessageSizeType:Request_Control;
out_msg.DirectedProbe := true;
+ out_msg.InitialRequestTime := in_msg.InitialRequestTime;
+ out_msg.ForwardRequestTime := get_time();
}
}
} else {
@@ -712,6 +718,8 @@
out_msg.Destination.broadcast(MachineType:L1Cache); // Send to all
L1 caches
out_msg.Destination.remove(in_msg.Requestor); // Don't include the
original requestor
out_msg.MessageSize := MessageSizeType:Broadcast_Control;
+ out_msg.InitialRequestTime := in_msg.InitialRequestTime;
+ out_msg.ForwardRequestTime := get_time();
}
}
}
diff -r 3559d47839a1 -r 9fc3475e8175 src/mem/protocol/MOESI_hammer-msg.sm
--- a/src/mem/protocol/MOESI_hammer-msg.sm Fri Aug 20 11:46:14 2010 -0700
+++ b/src/mem/protocol/MOESI_hammer-msg.sm Fri Aug 20 11:46:14 2010 -0700
@@ -78,6 +78,8 @@
NetDest Destination, desc="Multicast destination mask";
MessageSizeType MessageSize, desc="size category of the message";
bool DirectedProbe, default="false", desc="probe filter directed probe";
+ Time InitialRequestTime, default="0", desc="time the initial requests was
sent from the L1Cache";
+ Time ForwardRequestTime, default="0", desc="time the dir forwarded the
request";
}
// ResponseMsg (and also unblock requests)
@@ -90,6 +92,8 @@
bool Dirty, desc="Is the data dirty (different than
memory)?";
int Acks, desc="How many messages this counts as";
MessageSizeType MessageSize, desc="size category of the message";
+ Time InitialRequestTime, default="0", desc="time the initial requests was
sent from the L1Cache";
+ Time ForwardRequestTime, default="0", desc="time the dir forwarded the
request";
}
enumeration(DMARequestType, desc="...", default="DMARequestType_NULL") {
diff -r 3559d47839a1 -r 9fc3475e8175 src/mem/protocol/RubySlicc_Types.sm
--- a/src/mem/protocol/RubySlicc_Types.sm Fri Aug 20 11:46:14 2010 -0700
+++ b/src/mem/protocol/RubySlicc_Types.sm Fri Aug 20 11:46:14 2010 -0700
@@ -101,8 +101,10 @@
external_type(Sequencer) {
void readCallback(Address, DataBlock);
void readCallback(Address, GenericMachineType, DataBlock);
+ void readCallback(Address, GenericMachineType, DataBlock, Time, Time, Time);
void writeCallback(Address, DataBlock);
void writeCallback(Address, GenericMachineType, DataBlock);
+ void writeCallback(Address, GenericMachineType, DataBlock, Time, Time, Time);
void checkCoherence(Address);
void profileNack(Address, int, int, uint64);
}
diff -r 3559d47839a1 -r 9fc3475e8175 src/mem/ruby/profiler/Profiler.cc
--- a/src/mem/ruby/profiler/Profiler.cc Fri Aug 20 11:46:14 2010 -0700
+++ b/src/mem/ruby/profiler/Profiler.cc Fri Aug 20 11:46:14 2010 -0700
@@ -286,6 +286,35 @@
}
}
+ out << "miss_latency_wCC_issue_to_initial_request: "
+ << m_wCCIssueToInitialRequestHistogram << endl;
+ out << "miss_latency_wCC_initial_forward_request: "
+ << m_wCCInitialRequestToForwardRequestHistogram << endl;
+ out << "miss_latency_wCC_forward_to_first_response: "
+ << m_wCCForwardRequestToFirstResponseHistogram << endl;
+ out << "miss_latency_wCC_first_response_to_completion: "
+ << m_wCCFirstResponseToCompleteHistogram << endl;
+ out << "imcomplete_wCC_Times: " << m_wCCIncompleteTimes << endl;
+ out << "miss_latency_dir_issue_to_initial_request: "
+ << m_dirIssueToInitialRequestHistogram << endl;
+ out << "miss_latency_dir_initial_forward_request: "
+ << m_dirInitialRequestToForwardRequestHistogram << endl;
+ out << "miss_latency_dir_forward_to_first_response: "
+ << m_dirForwardRequestToFirstResponseHistogram << endl;
+ out << "miss_latency_dir_first_response_to_completion: "
+ << m_dirFirstResponseToCompleteHistogram << endl;
+ out << "imcomplete_dir_Times: " << m_dirIncompleteTimes << endl;
+
+ for (int i = 0; i < m_missMachLatencyHistograms.size(); i++) {
+ for (int j = 0; j < m_missMachLatencyHistograms[i].size(); j++) {
+ if (m_missMachLatencyHistograms[i][j].size() > 0) {
+ out << "miss_latency_" << RubyRequestType(i)
+ << "_" << GenericMachineType(j) << ": "
+ << m_missMachLatencyHistograms[i][j] << endl;
+ }
+ }
+ }
+
out << endl;
out << "All Non-Zero Cycle SW Prefetch Requests" << endl;
@@ -454,7 +483,24 @@
for (int i = 0; i < m_machLatencyHistograms.size(); i++) {
m_machLatencyHistograms[i].clear(200);
}
+ m_missMachLatencyHistograms.resize(RubyRequestType_NUM);
+ for (int i = 0; i < m_missLatencyHistograms.size(); i++) {
+ m_missMachLatencyHistograms[i].resize(GenericMachineType_NUM+1);
+ for (int j = 0; j < m_missMachLatencyHistograms[i].size(); j++) {
+ m_missMachLatencyHistograms[i][j].clear(200);
+ }
+ }
m_allMissLatencyHistogram.clear(200);
+ m_wCCIssueToInitialRequestHistogram.clear(200);
+ m_wCCInitialRequestToForwardRequestHistogram.clear(200);
+ m_wCCForwardRequestToFirstResponseHistogram.clear(200);
+ m_wCCFirstResponseToCompleteHistogram.clear(200);
+ m_wCCIncompleteTimes = 0;
+ m_dirIssueToInitialRequestHistogram.clear(200);
+ m_dirInitialRequestToForwardRequestHistogram.clear(200);
+ m_dirForwardRequestToFirstResponseHistogram.clear(200);
+ m_dirFirstResponseToCompleteHistogram.clear(200);
+ m_dirIncompleteTimes = 0;
m_SWPrefetchLatencyHistograms.resize(CacheRequestType_NUM);
for (int i = 0; i < m_SWPrefetchLatencyHistograms.size(); i++) {
@@ -581,6 +627,59 @@
m_allMissLatencyHistogram.add(cycles);
m_missLatencyHistograms[type].add(cycles);
m_machLatencyHistograms[respondingMach].add(cycles);
+ m_missMachLatencyHistograms[type][respondingMach].add(cycles);
+}
+
+void
+Profiler::missLatencyWcc(Time issuedTime,
+ Time initialRequestTime,
+ Time forwardRequestTime,
+ Time firstResponseTime,
+ Time completionTime)
+{
+ if ((issuedTime <= initialRequestTime) &&
+ (initialRequestTime <= forwardRequestTime) &&
+ (forwardRequestTime <= firstResponseTime) &&
+ (firstResponseTime <= completionTime)) {
+ m_wCCIssueToInitialRequestHistogram.add(initialRequestTime -
issuedTime);
+
+ m_wCCInitialRequestToForwardRequestHistogram.add(forwardRequestTime -
_______________________________________________
m5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/m5-dev