mem-ruby: Network can use custom data msg size
authorTiago Mück <tiago.muck@arm.com>
Thu, 5 Sep 2019 22:53:40 +0000 (17:53 -0500)
committerTiago Mück <tiago.muck@arm.com>
Fri, 9 Oct 2020 00:07:27 +0000 (00:07 +0000)
The size for network data messages can be set using a configuration
parameter. This is necessary so line transfers may be split in multiple
messages at the protocol level.

Change-Id: I86a272de597b04a898071db412b921cbe1651ef0
Signed-off-by: Tiago Mück <tiago.muck@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/31256
Reviewed-by: Jason Lowe-Power <power.jg@gmail.com>
Reviewed-by: Srikant Bharadwaj <srikant.bharadwaj@amd.com>
Maintainer: Jason Lowe-Power <power.jg@gmail.com>
Tested-by: kokoro <noreply+kokoro@google.com>
src/mem/ruby/network/Network.cc
src/mem/ruby/network/Network.hh
src/mem/ruby/network/Network.py

index cda99b19636590c91cd4ff00d5b9e8ce115fc487..a676a38277e50c6ea5d2edbf7ef1ddb0df9d9a4e 100644 (file)
@@ -55,6 +55,10 @@ Network::Network(const Params *p)
     m_virtual_networks = p->number_of_virtual_networks;
     m_control_msg_size = p->control_msg_size;
 
+    fatal_if(p->data_msg_size > p->ruby_system->getBlockSizeBytes(),
+             "%s: data message size > cache line size", name());
+    m_data_msg_size = p->data_msg_size + m_control_msg_size;
+
     params()->ruby_system->registerNetwork(this);
 
     // Populate localNodeVersions with the version of each MachineType in
@@ -150,12 +154,6 @@ Network::~Network()
     delete m_topology_ptr;
 }
 
-void
-Network::init()
-{
-    m_data_msg_size = RubySystem::getBlockSizeBytes() + m_control_msg_size;
-}
-
 uint32_t
 Network::MessageSizeType_to_int(MessageSizeType size_type)
 {
index f151aed9423455dd9ffae517f13569898a4f6b97..371ceb8bb18209d8d29dd842dc0f2263779f1c31 100644 (file)
@@ -82,7 +82,6 @@ class Network : public ClockedObject
     { return dynamic_cast<const Params *>(_params); }
 
     virtual ~Network();
-    void init() override;
 
     static uint32_t getNumberOfVirtualNetworks() { return m_virtual_networks; }
     int getNumNodes() const { return m_nodes; }
index 8999ff1cd1cd4316df546dcff6d317dc6e746ea3..5febaad299264890402c8678ff4981867282ae50 100644 (file)
@@ -25,6 +25,7 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 from m5.params import *
+from m5.proxy import *
 from m5.objects.ClockedObject import ClockedObject
 from m5.objects.BasicLink import BasicLink
 
@@ -53,3 +54,8 @@ class RubyNetwork(ClockedObject):
     slave = DeprecatedParam(in_port, '`slave` is now called `in_port`')
     out_port = VectorRequestPort("CPU output port")
     master = DeprecatedParam(out_port, '`master` is now called `out_port`')
+
+    data_msg_size = Param.Int(Parent.block_size_bytes,
+                            "Size of data messages. Defaults to the parent "
+                            "RubySystem cache line size.")
+