tests: Removed m5threads tests from .testignore

This commit fixes many problems which were resulting in these tests
not executing correctly. However, the m5thread tests are still failing
with an `fatal:syscall set_tid_address (#166) unimplemented` error,
recorded here: https://gem5.atlassian.net/browse/GEM5-747.

The tests have been removed from .testignore as part of our goal of
removing all tests from the .testignore file:
https://gem5.atlassian.net/browse/GEM5-361

Change-Id: I287d1e126963114a791d7f3aa563a037a89b2cb7
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/32916
Reviewed-by: Jason Lowe-Power <power.jg@gmail.com>
Maintainer: Jason Lowe-Power <power.jg@gmail.com>
Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
Bobby R. Bruce
2020-08-19 00:32:16 -07:00
parent cf5c9f6434
commit 1009c9878c
5 changed files with 163 additions and 25 deletions

View File

@@ -59,17 +59,5 @@ test-insttest-rv64i-linux-TimingSimpleCPU-RISCV-aarch64-fast
test-insttest-rv64i-linux-DerivO3CPU-RISCV-aarch64-fast
test-insttest-linux-AtomicSimpleCPU-SPARC-aarch64-fast
test-insttest-linux-TimingSimpleCPU-SPARC-aarch64-fast
test-atomic-DerivO3CPU-SPARC-x86_64-opt
test-atomic-TimingSimpleCPU-SPARC-x86_64-opt
test-atomic-DerivO3CPU-SPARC-x86_64-debug
test-atomic-TimingSimpleCPU-SPARC-x86_64-debug
test-atomic-DerivO3CPU-SPARC-x86_64-fast
test-atomic-TimingSimpleCPU-SPARC-x86_64-fast
test-atomic-DerivO3CPU-SPARC-aarch64-opt
test-atomic-TimingSimpleCPU-SPARC-aarch64-opt
test-atomic-DerivO3CPU-SPARC-aarch64-debug
test-atomic-TimingSimpleCPU-SPARC-aarch64-debug
test-atomic-DerivO3CPU-SPARC-aarch64-fast
test-atomic-TimingSimpleCPU-SPARC-aarch64-fast
realview-o3-checker-ARM-x86_64-opt
realview64-o3-checker-ARM-x86_64-opt

View File

@@ -26,6 +26,7 @@
import m5
from m5.objects import *
from caches import *
import sys
import argparse
@@ -43,6 +44,7 @@ root.system.clk_domain = SrcClockDomain()
root.system.clk_domain.clock = '3GHz'
root.system.clk_domain.voltage_domain = VoltageDomain()
root.system.mem_mode = 'timing'
root.system.mem_ranges = [AddrRange('512MB')]
if args.cpu_type == 'DerivO3CPU':
root.system.cpu = [DerivO3CPU(cpu_id = i)
@@ -54,11 +56,45 @@ else:
print("ERROR: CPU Type '" + args.cpu_type + "' not supported")
sys.exit(1)
root.system.membus = SystemXBar()
root.system.membus.badaddr_responder = BadAddr()
root.system.membus.default = root.system.membus.badaddr_responder.pio
root.system.system_port = root.system.membus.slave
process = Process(executable = args.cmd,
cmd = [args.cmd, str(args.num_cores)])
for i in range(int(args.num_cores)):
root.system.cpu[i].workload = process
for cpu in root.system.cpu:
cpu.workload = process
cpu.createThreads()
cpu.createInterruptController()
# Create a memory bus, a coherent crossbar, in this case
cpu.l2bus = L2XBar()
# Create an L1 instruction and data cache
cpu.icache = L1ICache()
cpu.dcache = L1DCache()
# Connect the instruction and data caches to the CPU
cpu.icache.connectCPU(cpu)
cpu.dcache.connectCPU(cpu)
# Hook the CPU ports up to the l2bus
cpu.icache.connectBus(cpu.l2bus)
cpu.dcache.connectBus(cpu.l2bus)
# Create an L2 cache and connect it to the l2bus
cpu.l2cache = L2Cache()
cpu.l2cache.connectCPUSideBus(cpu.l2bus)
# Connect the L2 cache to the L3 bus
cpu.l2cache.connectMemSideBus(root.system.membus)
root.system.mem_ctrl = DDR3_1600_8x8()
root.system.mem_ctrl.range = root.system.mem_ranges[0]
root.system.mem_ctrl.port = root.system.membus.master
m5.instantiate()
exit_event = m5.simulate()

View File

@@ -0,0 +1,112 @@
# Copyright (c) 2016 Jason Lowe-Power
# 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.
""" Caches with options for a simple gem5 configuration script
This file contains L1 I/D and L2 caches to be used in the simple
gem5 configuration script.
"""
import m5
from m5.objects import Cache, L2XBar, StridePrefetcher, SubSystem
from m5.params import AddrRange, AllMemory, MemorySize
from m5.util.convert import toMemorySize
# Some specific options for caches
# For all options see src/mem/cache/BaseCache.py
class L1Cache(PrefetchCache):
"""Simple L1 Cache with default values"""
assoc = 8
tag_latency = 1
data_latency = 1
response_latency = 1
mshrs = 16
tgts_per_mshr = 20
writeback_clean = True
def __init__(self, options=None):
super(L1Cache, self).__init__(options)
pass
def connectBus(self, bus):
"""Connect this cache to a memory-side bus"""
self.mem_side = bus.slave
def connectCPU(self, cpu):
"""Connect this cache's port to a CPU-side port
This must be defined in a subclass"""
raise NotImplementedError
class L1ICache(L1Cache):
"""Simple L1 instruction cache with default values"""
# Set the size
size = '32kB'
def __init__(self, opts=None):
super(L1ICache, self).__init__(opts)
def connectCPU(self, cpu):
"""Connect this cache's port to a CPU icache port"""
self.cpu_side = cpu.icache_port
class L1DCache(L1Cache):
"""Simple L1 data cache with default values"""
# Set the size
size = '32kB'
def __init__(self, opts=None):
super(L1DCache, self).__init__(opts)
def connectCPU(self, cpu):
"""Connect this cache's port to a CPU dcache port"""
self.cpu_side = cpu.dcache_port
class L2Cache(PrefetchCache):
"""Simple L2 Cache with default values"""
# Default parameters
size = '256kB'
assoc = 16
tag_latency = 10
data_latency = 10
response_latency = 1
mshrs = 20
tgts_per_mshr = 12
writeback_clean = True
def __init__(self, opts=None):
super(L2Cache, self).__init__(opts)
def connectCPUSideBus(self, bus):
self.cpu_side = bus.master
def connectMemSideBus(self, bus):
self.mem_side = bus.slave

View File

@@ -1,12 +1,6 @@
Redirecting stdout to build/SPARC/tests/opt/quick/se/40.m5threads-test-atomic/sparc/linux/o3-timing-mp/simout
Redirecting stderr to build/SPARC/tests/opt/quick/se/40.m5threads-test-atomic/sparc/linux/o3-timing-mp/simerr
gem5 Simulator System. http://gem5.org
gem5 is copyrighted software; use the --copyright option for details.
gem5 compiled Mar 29 2017 21:12:17
gem5 started Mar 29 2017 21:12:27
gem5 executing on gabeblack-desktop.mtv.corp.google.com, pid 42630
command line: /usr/local/google/home/gabeblack/gem5/gem5-public/build/SPARC/gem5.opt -d build/SPARC/tests/opt/quick/se/40.m5threads-test-atomic/sparc/linux/o3-timing-mp --stats-file 'text://stats.txt?desc=False' -re /usr/local/google/home/gabeblack/gem5/gem5-public/tests/testing/../run.py quick/se/40.m5threads-test-atomic/sparc/linux/o3-timing-mp
Global frequency set at 1000000000000 ticks per second
Init done
@@ -81,4 +75,3 @@ Iteration 9 completed
[Iteration 10, Thread 1] Critical section done, previously next=2, now next=1
Iteration 10 completed
PASSED :-)
Exiting @ tick 126524000 because exiting with last active thread context

View File

@@ -29,7 +29,14 @@ Test file for the m5threads atomic test
'''
from testlib import *
cpu_types = ('DerivO3CPU', 'TimingSimpleCPU')
cpu_types = (
# We're currently ignoring these cpu_types (therefore, disabling the test)
# due to a `fatal:syscall set_tid_address (#166)` fatal error being thrown.
# This is documented in this gem5 Jira ticket:
# https://gem5.atlassian.net/browse/GEM5-747
# 'DerivO3CPU',
# 'TimingSimpleCPU',
)
if config.bin_path:
base_path = config.bin_path
@@ -38,21 +45,23 @@ else:
'test_atomic', 'bin')
binary = 'test_atomic'
url = config.resource_url + '/current/test-progs/pthread/bin/' + binary
DownloadedProgram(url, base_path, binary)
url = config.resource_url + '/test-progs/pthreads/sparc64/' + binary
test_atomic = DownloadedProgram(url, base_path, binary)
verifiers = (
verifier.MatchStdoutNoPerf(joinpath(getcwd(), 'ref/sparc/linux/simout')),
verifier.MatchStdoutNoPerf(joinpath(getcwd(), 'ref/sparc64/simout')),
)
for cpu in cpu_types:
gem5_verify_config(
name='test-atomic-' + cpu,
verifiers=verifiers,
fixtures=(test_atomic,),
config=joinpath(getcwd(), 'atomic_system.py'),
config_args=['--cpu-type', cpu,
'--num-cores', '8',
'--cmd', joinpath(base_path, binary)],
valid_isas=('SPARC',),
valid_hosts=constants.supported_hosts,
length = constants.long_tag,
)