Mahyar Samani has submitted this change. (
https://gem5-review.googlesource.com/c/public/gem5/+/50752 )
Change subject: tests: Adding tests to evaluate memory modules.
......................................................................
tests: Adding tests to evaluate memory modules.
This change adds a script to validate the statistics reported
by gem5. It also overrides has_dma_ports for TestBoard to allow
other cache hierarchies such as MESITwoLevel connect to this board.
Change-Id: Iae0e61c1763c099cf10924a08b3e4989dc31e220
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/50752
Reviewed-by: Bobby R. Bruce <[email protected]>
Maintainer: Bobby R. Bruce <[email protected]>
Tested-by: kokoro <[email protected]>
---
M src/python/gem5/components/boards/test_board.py
M tests/gem5/traffic_gen/test_memory_traffic_gen.py
M tests/gem5/configs/simple_traffic_run.py
3 files changed, 231 insertions(+), 34 deletions(-)
Approvals:
Bobby R. Bruce: Looks good to me, approved; Looks good to me, approved
kokoro: Regressions pass
diff --git a/src/python/gem5/components/boards/test_board.py
b/src/python/gem5/components/boards/test_board.py
index 4bcefb1..2b80f9d 100644
--- a/src/python/gem5/components/boards/test_board.py
+++ b/src/python/gem5/components/boards/test_board.py
@@ -128,3 +128,7 @@
# memory.
self.mem_ranges = [AddrRange(memory.get_size())]
memory.set_memory_range(self.mem_ranges)
+
+ @overrides(AbstractBoard)
+ def has_dma_ports(self) -> bool:
+ return False
diff --git a/tests/gem5/configs/simple_traffic_run.py
b/tests/gem5/configs/simple_traffic_run.py
index 2541d90..f519335 100644
--- a/tests/gem5/configs/simple_traffic_run.py
+++ b/tests/gem5/configs/simple_traffic_run.py
@@ -25,22 +25,55 @@
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
"""
-This script creates a simple traffic generator. The simulator starts with a
-linear traffic generator, and ends with a random traffic generator. It is
used
-for testing purposes.
+This scripts is used for checking the correctness of statistics reported
+by the gem5 simulator. It can excercise certain components in the memory
+subsystem. The reported values could be used to compare against a validated
+set of statistics.
"""
import m5
-
-from m5.objects import Root
-
import argparse
import importlib
+from os.path import join
+from m5.objects import Root
+from m5.stats import gem5stats
from gem5.components.boards.test_board import TestBoard
-from gem5.components.cachehierarchies.classic.no_cache import NoCache
-from gem5.components.memory.single_channel import *
-from gem5.components.processors.complex_generator import ComplexGenerator
+from gem5.components.processors.linear_generator import LinearGenerator
+from gem5.components.processors.random_generator import RandomGenerator
+
+
+generator_class_map = {
+ "LinearGenerator": LinearGenerator,
+ "RandomGenerator": RandomGenerator,
+}
+
+generator_initializers = dict(rate="20GB/s")
+
+
+def cache_factory(cache_class):
+ if cache_class == "NoCache":
+ from gem5.components.cachehierarchies.classic.no_cache import
NoCache
+
+ return NoCache()
+ elif cache_class == "MESITwoLevel":
+ from gem5.components.cachehierarchies.ruby\
+ .mesi_two_level_cache_hierarchy import (
+ MESITwoLevelCacheHierarchy,
+ )
+
+ return MESITwoLevelCacheHierarchy(
+ l1i_size="32KiB",
+ l1i_assoc="8",
+ l1d_size="32KiB",
+ l1d_assoc="8",
+ l2_size="256KiB",
+ l2_assoc="4",
+ num_l2_banks=1,
+ )
+ else:
+ raise ValueError(f"The cache class {cache_class} is not
supported.")
+
parser = argparse.ArgumentParser(
description="A traffic generator that can be used to test a gem5 "
@@ -48,41 +81,52 @@
)
parser.add_argument(
- "module",
+ "generator_class",
type=str,
- help="The python module to import.",
+ help="The class of generator to use.",
+ choices=["LinearGenerator", "RandomGenerator"],
)
parser.add_argument(
- "mem_class",
+ "cache_class",
type=str,
- help="The memory class to import and instantiate.",
+ help="The cache class to import and instantiate.",
+ choices=["NoCache", "MESITwoLevel"],
)
parser.add_argument(
- "arguments",
+ "mem_module",
+ type=str,
+ help="The python module to import for memory.",
+)
+
+parser.add_argument(
+ "mem_class", type=str, help="The memory class to import and
instantiate."
+)
+
+parser.add_argument(
+ "mem_args",
nargs="*",
help="The arguments needed to instantiate the memory class.",
)
args = parser.parse_args()
-# This setup does not require a cache heirarchy. We therefore use the
`NoCache`
-# setup.
-cache_hierarchy = NoCache()
+generator_class = generator_class_map[args.generator_class]
+generator = generator_class(**generator_initializers)
-memory_class = getattr(importlib.import_module(args.module),
args.mem_class)
-memory = memory_class(*args.arguments)
+cache_hierarchy = cache_factory(args.cache_class)
-cmxgen = ComplexGenerator(num_cores=1)
-cmxgen.add_linear(rate="100GB/s")
-cmxgen.add_random(block_size=32, rate="50MB/s")
+memory_class = getattr(
+ importlib.import_module(args.mem_module), args.mem_class
+)
+memory = memory_class(*args.mem_args)
# We use the Test Board. This is a special board to run traffic generation
# tasks
motherboard = TestBoard(
clk_freq="3GHz",
- processor=cmxgen, # We pass the traffic generator as the processor.
+ processor=generator, # We pass the traffic generator as the processor.
memory=memory,
cache_hierarchy=cache_hierarchy,
)
@@ -93,15 +137,14 @@
m5.instantiate()
-cmxgen.start_traffic()
+generator.start_traffic()
print("Beginning simulation!")
exit_event = m5.simulate()
print(
"Exiting @ tick {} because {}.".format(m5.curTick(),
exit_event.getCause())
)
-cmxgen.start_traffic()
-print("The Linear taffic has finished. Swiching to random traffic!")
-exit_event = m5.simulate()
-print(
- "Exiting @ tick {} because {}.".format(m5.curTick(),
exit_event.getCause())
-)
+
+stats = gem5stats.get_simstat(root)
+json_out = join(m5.options.outdir, "stats.json")
+with open(json_out, "w") as json_stats:
+ stats.dump(json_stats, indent=2)
diff --git a/tests/gem5/traffic_gen/test_memory_traffic_gen.py
b/tests/gem5/traffic_gen/test_memory_traffic_gen.py
index e761fb6..ff08f3d 100644
--- a/tests/gem5/traffic_gen/test_memory_traffic_gen.py
+++ b/tests/gem5/traffic_gen/test_memory_traffic_gen.py
@@ -34,9 +34,24 @@
from testlib import *
-def test_memory(module: str, memory: str, *args) -> None:
+def test_memory(
+ generator: str, cache: str, module: str, memory: str, *args
+) -> None:
+ protocol_map = {"NoCache": None, "MESITwoLevel": "MESI_Two_Level"}
+ tag_map = {
+ "NoCache": constants.quick_tag,
+ "MESITwoLevel": constants.long_tag,
+ }
+
gem5_verify_config(
- name="test-memory-" + module + "." + memory,
+ name="test-memory-"
+ + generator
+ + "."
+ + cache
+ + "."
+ + module
+ + "."
+ + memory,
fixtures=(),
verifiers=(),
config=joinpath(
@@ -47,38 +62,156 @@
"simple_traffic_run.py",
),
config_args=[
+ generator,
+ cache,
module,
memory,
]
+ list(args),
valid_isas=(constants.null_tag,),
+ protocol=protocol_map[cache],
valid_hosts=constants.supported_hosts,
- length=constants.quick_tag,
+ length=tag_map[cache],
)
test_memory(
+ "LinearGenerator",
+ "NoCache",
"gem5.components.memory.single_channel",
"SingleChannelDDR3_1600",
"512MiB",
)
test_memory(
+ "LinearGenerator",
+ "NoCache",
"gem5.components.memory.single_channel",
"SingleChannelDDR3_2133",
"512MiB",
)
test_memory(
+ "LinearGenerator",
+ "NoCache",
"gem5.components.memory.single_channel",
"SingleChannelDDR4_2400",
"512MiB",
)
test_memory(
+ "LinearGenerator",
+ "NoCache",
"gem5.components.memory.single_channel",
"SingleChannelLPDDR3_1600",
"512MiB",
)
test_memory(
+ "LinearGenerator",
+ "NoCache",
"gem5.components.memory.single_channel",
"SingleChannelHBM",
- "512MiB"
+ "512MiB",
+)
+test_memory(
+ "RandomGenerator",
+ "NoCache",
+ "gem5.components.memory.single_channel",
+ "SingleChannelDDR3_1600",
+ "512MiB",
+)
+test_memory(
+ "RandomGenerator",
+ "NoCache",
+ "gem5.components.memory.single_channel",
+ "SingleChannelDDR3_2133",
+ "512MiB",
+)
+test_memory(
+ "RandomGenerator",
+ "NoCache",
+ "gem5.components.memory.single_channel",
+ "SingleChannelDDR4_2400",
+ "512MiB",
+)
+test_memory(
+ "RandomGenerator",
+ "NoCache",
+ "gem5.components.memory.single_channel",
+ "SingleChannelLPDDR3_1600",
+ "512MiB",
+)
+test_memory(
+ "RandomGenerator",
+ "NoCache",
+ "gem5.components.memory.single_channel",
+ "SingleChannelHBM",
+ "512MiB",
+)
+test_memory(
+ "LinearGenerator",
+ "MESITwoLevel",
+ "gem5.components.memory.single_channel",
+ "SingleChannelDDR3_1600",
+ "512MiB",
+)
+test_memory(
+ "LinearGenerator",
+ "MESITwoLevel",
+ "gem5.components.memory.single_channel",
+ "SingleChannelDDR3_2133",
+ "512MiB",
+)
+test_memory(
+ "LinearGenerator",
+ "MESITwoLevel",
+ "gem5.components.memory.single_channel",
+ "SingleChannelDDR4_2400",
+ "512MiB",
+)
+test_memory(
+ "LinearGenerator",
+ "MESITwoLevel",
+ "gem5.components.memory.single_channel",
+ "SingleChannelLPDDR3_1600",
+ "512MiB",
+)
+test_memory(
+ "LinearGenerator",
+ "MESITwoLevel",
+ "gem5.components.memory.single_channel",
+ "SingleChannelHBM",
+ "512MiB",
+)
+test_memory(
+ "RandomGenerator",
+ "MESITwoLevel",
+ "gem5.components.memory.single_channel",
+ "SingleChannelDDR3_1600",
+ "512MiB",
+)
+test_memory(
+ "RandomGenerator",
+ "MESITwoLevel",
+ "gem5.components.memory.single_channel",
+ "SingleChannelDDR3_2133",
+ "512MiB",
+)
+test_memory(
+ "RandomGenerator",
+ "MESITwoLevel",
+ "gem5.components.memory.single_channel",
+ "SingleChannelDDR4_2400",
+ "512MiB",
+)
+test_memory(
+ "RandomGenerator",
+ "MESITwoLevel",
+ "gem5.components.memory.single_channel",
+ "SingleChannelLPDDR3_1600",
+ "512MiB",
+)
+test_memory(
+ "RandomGenerator",
+ "MESITwoLevel",
+ "gem5.components.memory.single_channel",
+ "SingleChannelHBM",
+ "512MiB",
)
--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/50752
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: Iae0e61c1763c099cf10924a08b3e4989dc31e220
Gerrit-Change-Number: 50752
Gerrit-PatchSet: 10
Gerrit-Owner: Mahyar Samani <[email protected]>
Gerrit-Reviewer: Bobby R. Bruce <[email protected]>
Gerrit-Reviewer: Jason Lowe-Power <[email protected]>
Gerrit-Reviewer: Mahyar Samani <[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