Bobby R. Bruce has submitted this change. (
https://gem5-review.googlesource.com/c/public/gem5/+/49306 )
13 is the latest approved patch-set.
No files were changed between the latest approved patch-set and the
submitted one.
Change subject: python: Update boot_exit_disk_run.py for testing
......................................................................
python: Update boot_exit_disk_run.py for testing
This updates `configs/example/components-library/boot_exit_disk_run.py`
to be used for the gem5 boot tests by exposing arguments thus making the
run configurable.
Change-Id: I4e1c77e522ffca4bac2f328a1bc2306a4cd1402f
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/49306
Tested-by: kokoro <[email protected]>
Reviewed-by: Jason Lowe-Power <[email protected]>
Maintainer: Jason Lowe-Power <[email protected]>
---
M configs/example/components-library/boot_exit_disk_run.py
1 file changed, 153 insertions(+), 30 deletions(-)
Approvals:
Jason Lowe-Power: Looks good to me, approved; Looks good to me, approved
kokoro: Regressions pass
diff --git a/configs/example/components-library/boot_exit_disk_run.py
b/configs/example/components-library/boot_exit_disk_run.py
index ae8f87c..774f0dc 100644
--- a/configs/example/components-library/boot_exit_disk_run.py
+++ b/configs/example/components-library/boot_exit_disk_run.py
@@ -25,12 +25,7 @@
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
"""
-This example runs a simple boot exit test.
-
-Characteristics
----------------
-
-* Runs exclusively on the X86 ISA with the MESI_TWO_LEVEL coherence
protocol.
+This script will run a simple boot exit test.
"""
import m5
@@ -63,39 +58,150 @@
from components_library.resources.resource import Resource
import os
+import argparse
-# Run a check to ensure the right version of gem5 is being used.
+parser = argparse.ArgumentParser(
+ description="A script to run the gem5 boot test. This test boots the "
+ "linux kernel."
+)
+parser.add_argument(
+ "-m",
+ "--mem-system",
+ type=str,
+ choices=("classic", "mi_example", "mesi_two_level"),
+ required=True,
+ help="The memory system.",
+)
+parser.add_argument(
+ "-n",
+ "--num-cpus",
+ type=int,
+ choices=(1, 2, 4, 8),
+ required=True,
+ help="The number of CPUs.",
+)
+parser.add_argument(
+ "-c",
+ "--cpu",
+ type=str,
+ choices=("kvm", "atomic", "timing", "o3"),
+ required=True,
+ help="The CPU type.",
+)
+parser.add_argument(
+ "-b",
+ "--boot-type",
+ type=str,
+ choices=("systemd", "init"),
+ required=True,
+ help="The boot type.",
+)
+
+parser.add_argument(
+ "-t",
+ "--tick-exit",
+ type=int,
+ required=False,
+ help="The tick to exit the simulation. Note: using this may make the "
+ "selected boot-type selection pointless."
+)
+
+parser.add_argument(
+ "-r",
+ "--resource-directory",
+ type=str,
+ required=False,
+ help="The directory in which resources will be downloaded or exist.",
+)
+
+parser.add_argument(
+ "-o",
+ "--override-download",
+ action="store_true",
+ help="Override a local resource if the hashes do not match.",
+)
+
+args = parser.parse_args()
+
+# We check the gem5 binary is correct at runtime runtime.
+if get_runtime_isa() != ISA.X86:
+ raise EnvironmentError("The boot-exit tests must be run with the X86
ISA.")
+
if (
- get_runtime_coherence_protocol() != CoherenceProtocol.MESI_TWO_LEVEL
- or get_runtime_isa() != ISA.X86
+ args.mem_system == "mi_example"
+ and get_runtime_coherence_protocol() != CoherenceProtocol.MI_EXAMPLE
):
- raise EnvironmentError(
- "The boot-exit-disk_run.py should be run with X86_MESI_Two_Level."
+ raise EnvironmentError("gem5 binary not compiled to MI_EXAMPLE.")
+
+if (
+ args.mem_system == "mesi_two_level"
+ and get_runtime_coherence_protocol() !=
CoherenceProtocol.MESI_TWO_LEVEL
+):
+ raise EnvironmentError("gem5 binary not compiled to MESI_Two_Level.")
+
+cache_hierarchy = None
+if args.mem_system == "mi_example":
+ from components_library.cachehierarchies.ruby.\
+ mi_example_cache_hierarchy import (
+ MIExampleCacheHierarchy,
)
-from components_library.cachehierarchies.\
- ruby.mesi_two_level_cache_hierarchy import (
- MESITwoLevelCacheHierarchy,
-)
+ cache_hierarchy = MIExampleCacheHierarchy(size="32kB", assoc=8)
+elif args.mem_system == "mesi_two_level":
+ from components_library.cachehierarchies.ruby.\
+ mesi_two_level_cache_hierarchy import (
+ MESITwoLevelCacheHierarchy,
+ )
-# Setup the cache heirarchy to be MESI_Two_Level.
-cache_hierarchy = MESITwoLevelCacheHierarchy(
- l1d_size="32kB",
- l1d_assoc=8,
- l1i_size="32kB",
- l1i_assoc=8,
- l2_size="256kB",
- l2_assoc=16,
- num_l2_banks=1,
-)
+ cache_hierarchy = MESITwoLevelCacheHierarchy(
+ l1d_size="16kB",
+ l1d_assoc=8,
+ l1i_size="16kB",
+ l1i_assoc=8,
+ l2_size="256kB",
+ l2_assoc=16,
+ num_l2_banks=1,
+ )
+elif args.mem_system == "classic":
+ from components_library.cachehierarchies.classic.\
+ private_l1_cache_hierarchy import (
+ PrivateL1CacheHierarchy,
+ )
+
+ cache_hierarchy = PrivateL1CacheHierarchy(l1d_size="16kB",
l1i_size="16kB")
+else:
+ raise NotImplementedError(
+ "Memory system '{}' is not supported in the boot tests.".format(
+ args.mem_system
+ )
+ )
+
+assert cache_hierarchy != None
# Setup the system memory.
# Warning: This must be kept at 3GB for now. X86Motherboard does not
support
# anything else right now!
memory = SingleChannelDDR3_1600(size="3GB")
-# Setup a single core Timing Processor.
-processor = SimpleProcessor(cpu_type=CPUTypes.TIMING, num_cores=1)
+# Setup a Processor.
+
+cpu_type = None
+if args.cpu == "kvm":
+ cpu_type = CPUTypes.KVM
+elif args.cpu == "atomic":
+ cpu_type = CPUTypes.ATOMIC
+elif args.cpu == "timing":
+ cpu_type = CPUTypes.TIMING
+elif args.cpu == "o3":
+ cpu_type = CPUTypes.O3
+else:
+ raise NotImplementedError(
+ "CPU type '{}' is not supported in the boot
tests.".format(args.cpu)
+ )
+
+assert cpu_type != None
+
+processor = SimpleProcessor(cpu_type=cpu_type, num_cores=args.num_cpus)
# Setup the motherboard.
motherboard = X86Board(
@@ -108,10 +214,24 @@
motherboard.connect_things()
+additional_kernal_args = []
+if args.boot_type == "init":
+ additional_kernal_args.append("init=/root/exit.sh")
+
# Set the Full System workload.
motherboard.set_workload(
- kernel=Resource("x86-linux-kernel-5.4.49"),
- disk_image=Resource("x86-boot-exit"), command="m5 exit \n"
+ kernel=Resource(
+ "x86-linux-kernel-5.4.49",
+ override=args.override_download,
+ resource_directory=args.resource_directory,
+ ),
+ disk_image=Resource(
+ "x86-boot-exit",
+ override=args.override_download,
+ resource_directory=args.resource_directory,
+ ),
+ command="m5 exit \n",
+ kernel_args=additional_kernal_args,
)
@@ -126,7 +246,10 @@
m5.instantiate()
print("Beginning simulation!")
-exit_event = m5.simulate()
+if args.tick_exit != None:
+ exit_event = m5.simulate(args.tick_exit)
+else:
+ exit_event = m5.simulate()
print(
"Exiting @ tick {} because {}.".format(m5.curTick(),
exit_event.getCause())
)
--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/49306
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: I4e1c77e522ffca4bac2f328a1bc2306a4cd1402f
Gerrit-Change-Number: 49306
Gerrit-PatchSet: 15
Gerrit-Owner: Bobby R. Bruce <[email protected]>
Gerrit-Reviewer: Andreas Sandberg <[email protected]>
Gerrit-Reviewer: Bobby R. Bruce <[email protected]>
Gerrit-Reviewer: Jason Lowe-Power <[email protected]>
Gerrit-Reviewer: Jason Lowe-Power <[email protected]>
Gerrit-Reviewer: kokoro <[email protected]>
Gerrit-MessageType: merged
_______________________________________________
gem5-dev mailing list -- [email protected]
To unsubscribe send an email to [email protected]
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s