configs: Add Tarmac tracing option to the simple Arm configs
gem5 supports Tarmac trace generation for Arm simulations, but there are no examples of how to use this feature. This patch adds a `--tarmac-gen` option to three of the simple Arm configs. Tarmac generation is useful for out-of-the-box users, and this patch also provides an example of how to use the Tarmac generation feature. Change-Id: I0d3c523b5c0bb6d94de93bc502e4451622fb635d Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/69684 Reviewed-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Maintainer: Giacomo Travaglini <giacomo.travaglini@arm.com> Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2016-2017,2019-2021 ARM Limited
|
||||
# Copyright (c) 2016-2017,2019-2022 Arm Limited
|
||||
# All rights reserved.
|
||||
#
|
||||
# The license below extends only to copyright in the software and shall
|
||||
@@ -123,7 +123,13 @@ def create(args):
|
||||
# Add CPU clusters to the system
|
||||
system.cpu_cluster = [
|
||||
devices.ArmCpuCluster(
|
||||
system, args.num_cores, args.cpu_freq, "1.0V", *cpu_types[args.cpu]
|
||||
system,
|
||||
args.num_cores,
|
||||
args.cpu_freq,
|
||||
"1.0V",
|
||||
*cpu_types[args.cpu],
|
||||
tarmac_gen=args.tarmac_gen,
|
||||
tarmac_dest=args.tarmac_dest,
|
||||
)
|
||||
]
|
||||
|
||||
@@ -230,6 +236,17 @@ def main():
|
||||
)
|
||||
parser.add_argument("--checkpoint", action="store_true")
|
||||
parser.add_argument("--restore", type=str, default=None)
|
||||
parser.add_argument(
|
||||
"--tarmac-gen",
|
||||
action="store_true",
|
||||
help="Write a Tarmac trace.",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--tarmac-dest",
|
||||
choices=TarmacDump.vals,
|
||||
default="stdoutput",
|
||||
help="Destination for the Tarmac trace output. [Default: stdoutput]",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--dtb-gen",
|
||||
action="store_true",
|
||||
|
||||
@@ -106,6 +106,8 @@ class ArmCpuCluster(CpuCluster):
|
||||
l1i_type,
|
||||
l1d_type,
|
||||
l2_type,
|
||||
tarmac_gen=False,
|
||||
tarmac_dest=None,
|
||||
):
|
||||
super().__init__()
|
||||
self._cpu_type = cpu_type
|
||||
@@ -122,6 +124,12 @@ class ArmCpuCluster(CpuCluster):
|
||||
|
||||
self.generate_cpus(cpu_type, num_cpus)
|
||||
|
||||
for cpu in self.cpus:
|
||||
if tarmac_gen:
|
||||
cpu.tracer = TarmacTracer()
|
||||
if tarmac_dest is not None:
|
||||
cpu.tracer.outfile = tarmac_dest
|
||||
|
||||
system.addCpuCluster(self)
|
||||
|
||||
def addL1(self):
|
||||
@@ -177,23 +185,54 @@ class ArmCpuCluster(CpuCluster):
|
||||
|
||||
|
||||
class AtomicCluster(ArmCpuCluster):
|
||||
def __init__(self, system, num_cpus, cpu_clock, cpu_voltage="1.0V"):
|
||||
cpu_config = [
|
||||
ObjectList.cpu_list.get("AtomicSimpleCPU"),
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
]
|
||||
super().__init__(system, num_cpus, cpu_clock, cpu_voltage, *cpu_config)
|
||||
def __init__(
|
||||
self,
|
||||
system,
|
||||
num_cpus,
|
||||
cpu_clock,
|
||||
cpu_voltage="1.0V",
|
||||
tarmac_gen=False,
|
||||
tarmac_dest=None,
|
||||
):
|
||||
super().__init__(
|
||||
system,
|
||||
num_cpus,
|
||||
cpu_clock,
|
||||
cpu_voltage,
|
||||
cpu_type=ObjectList.cpu_list.get("AtomicSimpleCPU"),
|
||||
l1i_type=None,
|
||||
l1d_type=None,
|
||||
l2_type=None,
|
||||
tarmac_gen=tarmac_gen,
|
||||
tarmac_dest=tarmac_dest,
|
||||
)
|
||||
|
||||
def addL1(self):
|
||||
pass
|
||||
|
||||
|
||||
class KvmCluster(ArmCpuCluster):
|
||||
def __init__(self, system, num_cpus, cpu_clock, cpu_voltage="1.0V"):
|
||||
cpu_config = [ObjectList.cpu_list.get("ArmV8KvmCPU"), None, None, None]
|
||||
super().__init__(system, num_cpus, cpu_clock, cpu_voltage, *cpu_config)
|
||||
def __init__(
|
||||
self,
|
||||
system,
|
||||
num_cpus,
|
||||
cpu_clock,
|
||||
cpu_voltage="1.0V",
|
||||
tarmac_gen=False,
|
||||
tarmac_dest=None,
|
||||
):
|
||||
super().__init__(
|
||||
system,
|
||||
num_cpus,
|
||||
cpu_clock,
|
||||
cpu_voltage,
|
||||
cpu_type=ObjectList.cpu_list.get("ArmV8KvmCPU"),
|
||||
l1i_type=None,
|
||||
l1d_type=None,
|
||||
l2_type=None,
|
||||
tarmac_gen=tarmac_gen,
|
||||
tarmac_dest=tarmac_dest,
|
||||
)
|
||||
|
||||
def addL1(self):
|
||||
pass
|
||||
|
||||
@@ -129,7 +129,13 @@ def create(args):
|
||||
# Add CPU clusters to the system
|
||||
system.cpu_cluster = [
|
||||
devices.ArmCpuCluster(
|
||||
system, args.num_cores, args.cpu_freq, "1.0V", *cpu_types[args.cpu]
|
||||
system,
|
||||
args.num_cores,
|
||||
args.cpu_freq,
|
||||
"1.0V",
|
||||
*cpu_types[args.cpu],
|
||||
tarmac_gen=args.tarmac_gen,
|
||||
tarmac_dest=args.tarmac_dest,
|
||||
)
|
||||
]
|
||||
|
||||
@@ -257,6 +263,17 @@ def main():
|
||||
default="2GB",
|
||||
help="Specify the physical memory size",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--tarmac-gen",
|
||||
action="store_true",
|
||||
help="Write a Tarmac trace.",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--tarmac-dest",
|
||||
choices=TarmacDump.vals,
|
||||
default="stdoutput",
|
||||
help="Destination for the Tarmac trace output. [Default: stdoutput]",
|
||||
)
|
||||
parser.add_argument("--checkpoint", action="store_true")
|
||||
parser.add_argument("--restore", type=str, default=None)
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2016-2017, 2023 ARM Limited
|
||||
# Copyright (c) 2016-2017, 2022-2023 Arm Limited
|
||||
# All rights reserved.
|
||||
#
|
||||
# The license below extends only to copyright in the software and shall
|
||||
@@ -96,7 +96,13 @@ class SimpleSeSystem(System):
|
||||
# Add CPUs to the system. A cluster of CPUs typically have
|
||||
# private L1 caches and a shared L2 cache.
|
||||
self.cpu_cluster = devices.ArmCpuCluster(
|
||||
self, args.num_cores, args.cpu_freq, "1.2V", *cpu_types[args.cpu]
|
||||
self,
|
||||
args.num_cores,
|
||||
args.cpu_freq,
|
||||
"1.2V",
|
||||
*cpu_types[args.cpu],
|
||||
tarmac_gen=args.tarmac_gen,
|
||||
tarmac_dest=args.tarmac_dest,
|
||||
)
|
||||
|
||||
# Create a cache hierarchy (unless we are simulating a
|
||||
@@ -215,6 +221,17 @@ def main():
|
||||
default="2GB",
|
||||
help="Specify the physical memory size",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--tarmac-gen",
|
||||
action="store_true",
|
||||
help="Write a Tarmac trace.",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--tarmac-dest",
|
||||
choices=TarmacDump.vals,
|
||||
default="stdoutput",
|
||||
help="Destination for the Tarmac trace output. [Default: stdoutput]",
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user