changeset 1aa497ac86b2 in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=1aa497ac86b2
description:
ruby: mesi: remove owner and sharer fields from directory tags
The directory controller should not have the sharer field since there is
only one level 2 cache. Anyway the field was not in use. The owner
field
was being used to track the l2 cache version (in case of distributed
l2) that
has the cache block under consideration. The information is not
required
since the version of the level 2 cache can be obtained from a subset of
the
address bits.
diffstat:
configs/ruby/MESI_CMP_directory.py | 1 +
src/mem/protocol/MESI_CMP_directory-dir.sm | 50 ++++++-----------------------
2 files changed, 12 insertions(+), 39 deletions(-)
diffs (155 lines):
diff -r bdd606534bdc -r 1aa497ac86b2 configs/ruby/MESI_CMP_directory.py
--- a/configs/ruby/MESI_CMP_directory.py Tue Dec 03 10:51:40 2013 -0600
+++ b/configs/ruby/MESI_CMP_directory.py Fri Dec 20 20:34:03 2013 -0600
@@ -174,6 +174,7 @@
use_map =
options.use_map),
memBuffer = mem_cntrl,
+ l2_select_num_bits = l2_bits,
transitions_per_cycle = options.ports,
ruby_system = ruby_system)
diff -r bdd606534bdc -r 1aa497ac86b2 src/mem/protocol/MESI_CMP_directory-dir.sm
--- a/src/mem/protocol/MESI_CMP_directory-dir.sm Tue Dec 03 10:51:40
2013 -0600
+++ b/src/mem/protocol/MESI_CMP_directory-dir.sm Fri Dec 20 20:34:03
2013 -0600
@@ -38,14 +38,15 @@
: DirectoryMemory * directory,
MemoryControl * memBuffer,
Cycles to_mem_ctrl_latency = 1,
- Cycles directory_latency = 6
+ Cycles directory_latency = 6,
+ int l2_select_num_bits
{
-
- MessageBuffer requestToDir, network="From", virtual_network="0",
ordered="false", vnet_type="request";
- MessageBuffer responseToDir, network="From", virtual_network="1",
ordered="false", vnet_type="response";
-
- MessageBuffer requestFromDir, network="To", virtual_network="0",
ordered="false", vnet_type="request";
- MessageBuffer responseFromDir, network="To", virtual_network="1",
ordered="false", vnet_type="response";
+ MessageBuffer requestToDir, network="From", virtual_network="0",
+ ordered="false", vnet_type="request";
+ MessageBuffer responseToDir, network="From", virtual_network="1",
+ ordered="false", vnet_type="response";
+ MessageBuffer responseFromDir, network="To", virtual_network="1",
+ ordered="false", vnet_type="response";
// STATES
state_declaration(State, desc="Directory states",
default="Directory_State_I") {
@@ -82,8 +83,6 @@
structure(Entry, desc="...", interface="AbstractEntry") {
State DirectoryState, desc="Directory state";
DataBlock DataBlk, desc="data for the block";
- NetDest Sharers, desc="Sharers for this block";
- NetDest Owner, desc="Owner of this block";
}
// TBE entries for DMA requests
@@ -104,6 +103,7 @@
// ** OBJECTS **
+ int l2_select_low_bit, default="RubySystem::getBlockSizeBits()";
TBETable TBEs, template="<Directory_TBE>", constructor="m_number_of_TBEs";
void set_tbe(TBE tbe);
@@ -133,21 +133,11 @@
}
void setState(TBE tbe, Address addr, State state) {
-
if (is_valid(tbe)) {
tbe.TBEState := state;
}
if (directory.isPresent(addr)) {
-
- if (state == State:I) {
- assert(getDirectoryEntry(addr).Owner.count() == 0);
- assert(getDirectoryEntry(addr).Sharers.count() == 0);
- } else if (state == State:M) {
- assert(getDirectoryEntry(addr).Owner.count() == 1);
- assert(getDirectoryEntry(addr).Sharers.count() == 0);
- }
-
getDirectoryEntry(addr).DirectoryState := state;
}
}
@@ -416,22 +406,14 @@
requestNetwork_in.recycle();
}
-
- action(e_ownerIsRequestor, "e", desc="The owner is now the requestor") {
- peek(requestNetwork_in, RequestMsg) {
- getDirectoryEntry(address).Owner.clear();
- getDirectoryEntry(address).Owner.add(in_msg.Requestor);
- }
- }
-
-
action(inv_sendCacheInvalidate, "inv", desc="Invalidate a cache block") {
peek(requestNetwork_in, RequestMsg) {
enqueue(responseNetwork_out, ResponseMsg, latency=directory_latency) {
out_msg.Addr := address;
out_msg.Type := CoherenceResponseType:INV;
out_msg.Sender := machineID;
- out_msg.Destination := getDirectoryEntry(address).Owner;
+ out_msg.Destination.add(mapAddressToRange(address, MachineType:L2Cache,
+ l2_select_low_bit, l2_select_num_bits));
out_msg.MessageSize := MessageSizeType:Response_Control;
}
}
@@ -450,10 +432,6 @@
}
}
- action(c_clearOwner, "c", desc="Clear the owner field") {
- getDirectoryEntry(address).Owner.clear();
- }
-
action(v_allocateTBE, "v", desc="Allocate TBE") {
peek(requestNetwork_in, RequestMsg) {
TBEs.allocate(address);
@@ -500,10 +478,8 @@
// TRANSITIONS
-
transition(I, Fetch, IM) {
qf_queueMemoryFetchRequest;
- e_ownerIsRequestor;
j_popIncomingRequestQueue;
}
@@ -514,7 +490,6 @@
}
//added by SS
transition(M, CleanReplacement, I) {
- c_clearOwner;
a_sendAck;
k_popIncomingResponseQueue;
}
@@ -526,7 +501,6 @@
}
transition(MI, Memory_Ack, I) {
- c_clearOwner;
aa_sendAck;
l_popMemQueue;
kd_wakeUpDependents;
@@ -580,7 +554,6 @@
transition(M_DRDI, Memory_Ack, I) {
aa_sendAck;
- c_clearOwner;
l_popMemQueue;
kd_wakeUpDependents;
}
@@ -600,7 +573,6 @@
transition(M_DWRI, Memory_Ack, I) {
dwt_writeDMADataFromTBE;
aa_sendAck;
- c_clearOwner;
da_sendDMAAck;
w_deallocateTBE;
l_popMemQueue;
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev