Bobby R. Bruce has submitted this change. ( https://gem5-review.googlesource.com/c/public/gem5/+/50888 )

Change subject: configs,tests: Add Ubuntu boot example for the gem5 library
......................................................................

configs,tests: Add Ubuntu boot example for the gem5 library

Change-Id: I5d8c0f424e661123458c0d3d55159838d4fd951d
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/50888
Reviewed-by: Bobby R. Bruce <bbr...@ucdavis.edu>
Maintainer: Bobby R. Bruce <bbr...@ucdavis.edu>
Tested-by: kokoro <noreply+kok...@google.com>
---
M tests/gem5/gem5_library_example_tests/test_gem5_library_examples.py
A configs/example/gem5_library/x86-ubuntu-run.py
2 files changed, 214 insertions(+), 0 deletions(-)

Approvals:
  Bobby R. Bruce: Looks good to me, approved; Looks good to me, approved
  kokoro: Regressions pass




diff --git a/configs/example/gem5_library/x86-ubuntu-run.py b/configs/example/gem5_library/x86-ubuntu-run.py
new file mode 100644
index 0000000..17cabcb
--- /dev/null
+++ b/configs/example/gem5_library/x86-ubuntu-run.py
@@ -0,0 +1,178 @@
+# Copyright (c) 2021 The Regents of the University of California
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met: redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer;
+# redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution;
+# neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""
+
+This script shows an example of running a full system Ubuntu boot simulation
+using the gem5 library. This simulation boots Ubuntu 18.04 using 2 KVM CPU
+cores. The simulation then switches to 2 Timing CPU cores before running an
+echo statement.
+
+Usage
+-----
+
+```
+scons build/X86_MESI_Two_Level/gem5.opt
+./build/X86_MESI_Two_Level/gem5.opt \
+    configs/example/gem5_library/x86-ubuntu-run.py
+```
+"""
+
+import m5
+from m5.objects import Root
+
+from gem5.utils.requires import requires
+from gem5.components.boards.x86_board import X86Board
+from gem5.components.memory.single_channel import SingleChannelDDR3_1600
+from gem5.components.processors.simple_switchable_processor import (
+    SimpleSwitchableProcessor,
+)
+from gem5.components.processors.cpu_types import CPUTypes
+from gem5.isas import ISA
+from gem5.coherence_protocol import CoherenceProtocol
+from gem5.resources.resource import Resource
+
+import os
+
+# This runs a check to ensure the gem5 binary is compiled to X86 and to the
+# MESI Two Level coherence protocol.
+requires(
+    isa_required=ISA.X86,
+    coherence_protocol_required=CoherenceProtocol.MESI_TWO_LEVEL,
+    kvm_required=True,
+)
+
+from gem5.components.cachehierarchies.ruby.\
+    mesi_two_level_cache_hierarchy import (
+    MESITwoLevelCacheHierarchy,
+)
+
+# Here we setup a MESI Two Level Cache Hierarchy.
+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,
+)
+
+# Setup the system memory.
+memory = SingleChannelDDR3_1600(size="3GB")
+
+# Here we setup the processor. This is a special switchable processor in which
+# a starting core type and a switch core type must be specified. Once a
+# configuration is instantiated a user may call `processor.switch()` to switch
+# from the starting core types to the switch core types. In this simulation
+# we start with KVM cores to simulate the OS boot, then switch to the Timing
+# cores for the command we wish to run after boot.
+processor = SimpleSwitchableProcessor(
+    starting_core_type=CPUTypes.KVM,
+    switch_core_type=CPUTypes.TIMING,
+    num_cores=2,
+)
+
+# Here we setup the board. The X86Board allows for Full-System X86 simulations.
+board = X86Board(
+    clk_freq="3GHz",
+    processor=processor,
+    memory=memory,
+    cache_hierarchy=cache_hierarchy,
+)
+
+board.connect_things()
+
+# Here we set the Full System workload.
+# The `set_workload` function for the X86Board takes a kernel, a disk image,
+# and, optionally, a command to run.
+
+# This is the command to run after the system has booted. The first `m5 exit` +# will stop the simulation so we can switch the CPU cores from KVM to timing
+# and continue the simulation to run the echo command, sleep for a second,
+# then, again, call `m5 exit` to terminate the simulation. After simulation
+# has ended you may inspect `m5out/system.pc.com_1.device` to see the echo
+# output.
+command = "m5 exit;" \
+        + "echo 'This is running on Timing CPU cores.';" \
+        + "sleep 1;" \
+        + "m5 exit;"
+
+board.set_workload(
+    # The x86 linux kernel will be automatically downloaded to the
+    # `tests/gem5/resources` directory if not already present.
+    kernel=Resource(
+        "x86-linux-kernel-5.4.49",
+        resource_directory=os.path.join(
+            os.path.dirname(
+                os.path.dirname(
+                    os.path.dirname(
+                        os.path.dirname(os.path.realpath(__file__))
+                    )
+                )
+            ),
+            "tests",
+            "gem5",
+            "resources",
+        ),
+        override=True,
+    ),
+    # The x86 ubuntu image will be automatically downloaded to the
+    # `tests/gem5/resources` directory if not already present.
+    disk_image=Resource(
+        "x86-ubuntu-img",
+        resource_directory=os.path.join(
+            os.path.dirname(
+                os.path.dirname(
+                    os.path.dirname(
+                        os.path.dirname(os.path.realpath(__file__))
+                    )
+                )
+            ),
+            "tests",
+            "gem5",
+            "resources",
+        ),
+        override=True,
+    ),
+    command=command,
+)
+
+root = Root(full_system=True, system=board)
+root.sim_quantum = int(1e9) # sim_quantum must be st if KVM cores are used.
+
+m5.instantiate()
+
+# This first stretch of the simulation runs using the KVM cores. In this setup
+# this will terminate until Ubuntu boot is complete.
+m5.simulate()
+
+# This will switch from the KVM cores to the Timing cores.
+processor.switch()
+
+# This final stretch of the simulation will be run using the Timing cores. In
+# this setup an echo statement will be executed prior to exiting.
+m5.simulate()
diff --git a/tests/gem5/gem5_library_example_tests/test_gem5_library_examples.py b/tests/gem5/gem5_library_example_tests/test_gem5_library_examples.py
index 91a6a0a..38ceac8 100644
--- a/tests/gem5/gem5_library_example_tests/test_gem5_library_examples.py
+++ b/tests/gem5/gem5_library_example_tests/test_gem5_library_examples.py
@@ -30,6 +30,7 @@
 """
 from testlib import *
 import re
+import os

 hello_verifier = verifier.MatchRegex(re.compile(r"Hello world!"))

@@ -49,3 +50,25 @@
     valid_hosts=constants.supported_hosts,
     length=constants.quick_tag,
 )
+
+
+if os.access("/dev/kvm", mode=os.R_OK | os.W_OK):
+ # The x86-ubuntu-run uses KVM cores, this test will therefore only be run
+    # on systems that support KVM.
+    gem5_verify_config(
+        name="test-gem5-library-example-x86-ubuntu-run",
+        fixtures=(),
+        verifiers=(),
+        config=joinpath(
+            config.base_dir,
+            "configs",
+            "example",
+            "gem5_library",
+            "x86-ubuntu-run.py",
+        ),
+        config_args=[],
+        valid_isas=(constants.x86_tag,),
+        protocol="MESI_Two_Level",
+        valid_hosts=constants.supported_hosts,
+        length=constants.long_tag,
+    )

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/50888
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: I5d8c0f424e661123458c0d3d55159838d4fd951d
Gerrit-Change-Number: 50888
Gerrit-PatchSet: 6
Gerrit-Owner: Bobby R. Bruce <bbr...@ucdavis.edu>
Gerrit-Reviewer: Bobby R. Bruce <bbr...@ucdavis.edu>
Gerrit-Reviewer: Jason Lowe-Power <ja...@lowepower.com>
Gerrit-Reviewer: Jason Lowe-Power <power...@gmail.com>
Gerrit-Reviewer: kokoro <noreply+kok...@google.com>
Gerrit-MessageType: merged
_______________________________________________
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