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