AdriĆ  Armejach has uploaded this change for review. ( https://gem5-review.googlesource.com/c/public/gem5/+/29773 )

Change subject: configs: Add memory controller options to fs_bigLITTLE
......................................................................

configs: Add memory controller options to fs_bigLITTLE

The bigLITTLE config currently only supports SimpleMemory. This patch
adds command line switches to specify the type and number of memory
controllers.

Change-Id: I87a0ec22e56339b19ec54f678156075f045afd5e
---
M configs/example/arm/devices.py
M configs/example/arm/fs_bigLITTLE.py
2 files changed, 50 insertions(+), 3 deletions(-)



diff --git a/configs/example/arm/devices.py b/configs/example/arm/devices.py
index cc8ac5e..6ed30d8 100644
--- a/configs/example/arm/devices.py
+++ b/configs/example/arm/devices.py
@@ -39,12 +39,16 @@
 from __future__ import absolute_import

 import six
+import math
+

 import m5
 from m5.objects import *
+from m5.util import fatal
 m5.util.addToPath('../../')
 from common.Caches import *
 from common import ObjectList
+from common import MemConfig

 if six.PY3:
     long = int
@@ -392,4 +396,36 @@
             for cluster in self._clusters:
                 cluster.connectMemSide(cluster_mem_bus)

+        def addMemCtrls(self, mem_type, num_ctrls):
+            intlv_bits = int(math.log(num_ctrls, 2))
+            if 2 ** intlv_bits != num_ctrls:
+                fatal("Number of memory channels must be a power of 2")
+
+            mem_ctrls_cls = ObjectList.mem_list.get(mem_type)
+            mem_ctrls = []
+
+            # The default behaviour is to interleave memory channels on 128
+ # byte granularity, or cache line granularity if larger than 128
+            # byte. This value is based on the locality seen across a large
+            # range of workloads.
+            intlv_size = max(128, self.cache_line_size.value)
+
+            # Create an array of memory controllers for every range (most
+            # systems will only have one).
+            for r in self.mem_ranges:
+                for i in range(num_ctrls):
+                    mem_ctrl = MemConfig.create_mem_ctrl(mem_ctrls_cls, r,
+                                                         i, num_ctrls,
+                                                         intlv_bits,
+                                                         intlv_size, 0)
+
+                    mem_ctrls.append(mem_ctrl)
+
+            # Connect the controllers to the membus
+            for i in range(len(mem_ctrls)):
+                mem_ctrls[i].port = self.membus.master
+
+            return mem_ctrls
+
+
     return SimpleSystem(caches, mem_size, platform, **kwargs)
diff --git a/configs/example/arm/fs_bigLITTLE.py b/configs/example/arm/fs_bigLITTLE.py
index 228d11c..14651ce 100644
--- a/configs/example/arm/fs_bigLITTLE.py
+++ b/configs/example/arm/fs_bigLITTLE.py
@@ -114,7 +114,8 @@
                                          cpu_voltage, *cpu_config)

 def createSystem(caches, kernel, bootscript, machine_type="VExpress_GEM5",
-                 disks=[],  mem_size=default_mem_size, bootloader=None):
+                 disks=[],  mem_size=default_mem_size, mem_type=None,
+                 mem_channels=2, bootloader=None):
     platform = ObjectList.platform_list.get(machine_type)
     m5.util.inform("Simulated platform: %s", platform.__name__)

@@ -124,8 +125,11 @@
                                    object_file=SysPaths.binary(kernel)),
                                readfile=bootscript)

-    sys.mem_ctrls = [ SimpleMemory(range=r, port=sys.membus.master)
-                      for r in sys.mem_ranges ]
+    if mem_type:
+        sys.mem_ctrls = sys.addMemCtrls(mem_type, mem_channels)
+    else:
+        sys.mem_ctrls = [ SimpleMemory(range=r, port=sys.membus.master)
+                          for r in sys.mem_ranges ]

     sys.connect()

@@ -199,6 +203,11 @@
                         "Default: %(default)s")
     parser.add_argument("--mem-size", type=str, default=default_mem_size,
                         help="System memory size")
+    parser.add_argument("--mem-type", type=str, default=None,
+                        choices=ObjectList.mem_list.get_names(),
+                        help="Type of memory to use")
+    parser.add_argument("--mem-channels", type=int, default=2,
+                        help="Number of memory channels")
     parser.add_argument("--kernel-cmd", type=str, default=None,
                         help="Custom Linux kernel command")
     parser.add_argument("--bootloader", action="append",
@@ -240,6 +249,8 @@
                           options.machine_type,
                           disks=disks,
                           mem_size=options.mem_size,
+                          mem_type=options.mem_type,
+                          mem_channels=options.mem_channels,
                           bootloader=options.bootloader)

     root.system = system

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/29773
To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings

Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: I87a0ec22e56339b19ec54f678156075f045afd5e
Gerrit-Change-Number: 29773
Gerrit-PatchSet: 1
Gerrit-Owner: AdriĆ  Armejach <adria.armej...@bsc.es>
Gerrit-MessageType: newchange
_______________________________________________
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

Reply via email to