changeset 5648986156db in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=5648986156db
description:
Ruby: Add support for functional accesses
This patch rpovides functional access support in Ruby. Currently only
the M5Port of RubyPort supports functional accesses. The support for
functional through the PioPort will be added as a separate patch.
diffstat:
configs/example/ruby_direct_test.py | 2 +-
configs/example/ruby_fs.py | 5 +-
configs/example/ruby_mem_test.py | 24 ++-
configs/example/ruby_network_test.py | 2 +-
configs/example/ruby_random_test.py | 8 +-
configs/example/se.py | 2 +-
configs/ruby/MESI_CMP_directory.py | 17 +-
configs/ruby/MI_example.py | 11 +-
configs/ruby/MOESI_CMP_directory.py | 19 +-
configs/ruby/MOESI_CMP_token.py | 17 +-
configs/ruby/MOESI_hammer.py | 13 +-
configs/ruby/Ruby.py | 24 +-
src/cpu/testers/memtest/MemTest.py | 2 +
src/cpu/testers/memtest/memtest.cc | 59 ++++--
src/cpu/testers/memtest/memtest.hh | 2 +
src/mem/packet.cc | 6 +-
src/mem/packet.hh | 19 ++
src/mem/protocol/MESI_CMP_directory-L1cache.sm | 7 +
src/mem/protocol/MESI_CMP_directory-L2cache.sm | 9 +-
src/mem/protocol/MESI_CMP_directory-dir.sm | 15 +-
src/mem/protocol/MESI_CMP_directory-dma.sm | 4 +
src/mem/protocol/MI_example-cache.sm | 4 +
src/mem/protocol/MI_example-dir.sm | 10 +-
src/mem/protocol/MI_example-dma.sm | 4 +
src/mem/protocol/MOESI_CMP_directory-L1cache.sm | 7 +
src/mem/protocol/MOESI_CMP_directory-L2cache.sm | 24 ++-
src/mem/protocol/MOESI_CMP_directory-dir.sm | 18 +-
src/mem/protocol/MOESI_CMP_directory-dma.sm | 4 +
src/mem/protocol/MOESI_CMP_token-L1cache.sm | 4 +
src/mem/protocol/MOESI_CMP_token-L2cache.sm | 4 +
src/mem/protocol/MOESI_CMP_token-dir.sm | 14 +-
src/mem/protocol/MOESI_CMP_token-dma.sm | 4 +
src/mem/protocol/MOESI_hammer-cache.sm | 4 +
src/mem/protocol/MOESI_hammer-dir.sm | 58 +++---
src/mem/protocol/MOESI_hammer-dma.sm | 4 +
src/mem/protocol/RubySlicc_Exports.sm | 7 +
src/mem/ruby/network/Network.cc | 1 +
src/mem/ruby/network/Network.py | 1 +
src/mem/ruby/profiler/Profiler.cc | 2 +
src/mem/ruby/profiler/Profiler.py | 1 +
src/mem/ruby/recorder/Tracer.cc | 2 +-
src/mem/ruby/recorder/Tracer.py | 1 +
src/mem/ruby/slicc_interface/AbstractController.hh | 9 +-
src/mem/ruby/slicc_interface/Controller.py | 1 +
src/mem/ruby/slicc_interface/SConscript | 1 +
src/mem/ruby/system/Cache.py | 41 ----
src/mem/ruby/system/DirectoryMemory.cc | 4 +-
src/mem/ruby/system/DirectoryMemory.py | 43 -----
src/mem/ruby/system/RubyPort.cc | 175 ++++++++++++++++++++-
src/mem/ruby/system/RubyPort.hh | 7 +-
src/mem/ruby/system/RubySystem.py | 3 -
src/mem/ruby/system/SConscript | 3 +-
src/mem/ruby/system/Sequencer.py | 1 +
src/mem/ruby/system/System.cc | 28 ++-
src/mem/ruby/system/System.hh | 13 +-
src/mem/slicc/ast/MemberExprAST.py | 19 +-
tests/configs/memtest-ruby.py | 12 +-
tests/configs/rubytest-ruby.py | 8 +-
tests/configs/simple-timing-mp-ruby.py | 2 +-
tests/configs/simple-timing-ruby.py | 2 +-
60 files changed, 572 insertions(+), 245 deletions(-)
diffs (truncated from 1916 to 300 lines):
diff -r 4adb1148ef73 -r 5648986156db configs/example/ruby_direct_test.py
--- a/configs/example/ruby_direct_test.py Tue Jun 28 18:27:38 2011 -0500
+++ b/configs/example/ruby_direct_test.py Thu Jun 30 19:49:26 2011 -0500
@@ -97,7 +97,7 @@
options.requests,
generator = generator)
-system.ruby = Ruby.create_system(options, system)
+Ruby.create_system(options, system)
assert(options.num_cpus == len(system.ruby._cpu_ruby_ports))
diff -r 4adb1148ef73 -r 5648986156db configs/example/ruby_fs.py
--- a/configs/example/ruby_fs.py Tue Jun 28 18:27:38 2011 -0500
+++ b/configs/example/ruby_fs.py Thu Jun 30 19:49:26 2011 -0500
@@ -117,10 +117,7 @@
else:
fatal("incapable of building non-alpha or non-x86 full system!")
-system.ruby = Ruby.create_system(options,
- system,
- system.piobus,
- system._dma_devices)
+Ruby.create_system(options, system, system.piobus, system._dma_devices)
system.cpu = [CPUClass(cpu_id=i) for i in xrange(options.num_cpus)]
diff -r 4adb1148ef73 -r 5648986156db configs/example/ruby_mem_test.py
--- a/configs/example/ruby_mem_test.py Tue Jun 28 18:27:38 2011 -0500
+++ b/configs/example/ruby_mem_test.py Thu Jun 30 19:49:26 2011 -0500
@@ -55,6 +55,10 @@
help="Progress message interval "
"[default: %default]")
parser.add_option("--num-dmas", type="int", default=0, help="# of dma testers")
+parser.add_option("--functional", type="int", default=0,
+ help="percentage of accesses that should be functional")
+parser.add_option("--suppress-func-warnings", action="store_true",
+ help="suppress warnings when functional accesses fail")
#
# Add the ruby specific and protocol specific options
@@ -90,14 +94,15 @@
sys.exit(1)
#
-# Currently ruby does not support atomic, functional, or uncacheable accesses
+# Currently ruby does not support atomic or uncacheable accesses
#
cpus = [ MemTest(atomic = False, \
max_loads = options.maxloads, \
issue_dmas = False, \
- percent_functional = 0, \
+ percent_functional = options.functional, \
percent_uncacheable = 0, \
- progress_interval = options.progress) \
+ progress_interval = options.progress, \
+ suppress_func_warnings = options.suppress_func_warnings) \
for i in xrange(options.num_cpus) ]
system = System(cpu = cpus,
@@ -110,15 +115,14 @@
issue_dmas = True, \
percent_functional = 0, \
percent_uncacheable = 0, \
- progress_interval = options.progress) \
+ progress_interval = options.progress, \
+ warn_on_failure = options.warn_on_failure) \
for i in xrange(options.num_dmas) ]
system.dma_devices = dmas
else:
dmas = []
-system.ruby = Ruby.create_system(options, \
- system, \
- dma_devices = dmas)
+Ruby.create_system(options, system, dma_devices = dmas)
#
# The tester is most effective when randomization is turned on and
@@ -141,6 +145,12 @@
#
system.ruby._cpu_ruby_ports[i].deadlock_threshold = 5000000
+ #
+ # Ruby doesn't need the backing image of memory when running with
+ # the tester.
+ #
+ system.ruby._cpu_ruby_ports[i].access_phys_mem = False
+
for (i, dma) in enumerate(dmas):
#
# Tie the dma memtester ports to the correct functional port
diff -r 4adb1148ef73 -r 5648986156db configs/example/ruby_network_test.py
--- a/configs/example/ruby_network_test.py Tue Jun 28 18:27:38 2011 -0500
+++ b/configs/example/ruby_network_test.py Thu Jun 30 19:49:26 2011 -0500
@@ -105,7 +105,7 @@
system = System(cpu = cpus,
physmem = PhysicalMemory())
-system.ruby = Ruby.create_system(options, system)
+Ruby.create_system(options, system)
i = 0
for ruby_port in system.ruby._cpu_ruby_ports:
diff -r 4adb1148ef73 -r 5648986156db configs/example/ruby_random_test.py
--- a/configs/example/ruby_random_test.py Tue Jun 28 18:27:38 2011 -0500
+++ b/configs/example/ruby_random_test.py Thu Jun 30 19:49:26 2011 -0500
@@ -99,7 +99,7 @@
#
system = System(tester = tester, physmem = PhysicalMemory())
-system.ruby = Ruby.create_system(options, system)
+Ruby.create_system(options, system)
assert(options.num_cpus == len(system.ruby._cpu_ruby_ports))
@@ -121,6 +121,12 @@
#
ruby_port.using_ruby_tester = True
+ #
+ # Ruby doesn't need the backing image of memory when running with
+ # the tester.
+ #
+ ruby_port.access_phys_mem = False
+
# -----------------------
# run simulation
# -----------------------
diff -r 4adb1148ef73 -r 5648986156db configs/example/se.py
--- a/configs/example/se.py Tue Jun 28 18:27:38 2011 -0500
+++ b/configs/example/se.py Thu Jun 30 19:49:26 2011 -0500
@@ -177,7 +177,7 @@
if options.ruby:
options.use_map = True
- system.ruby = Ruby.create_system(options, system)
+ Ruby.create_system(options, system)
assert(options.num_cpus == len(system.ruby._cpu_ruby_ports))
else:
system.physmem.port = system.membus.port
diff -r 4adb1148ef73 -r 5648986156db configs/ruby/MESI_CMP_directory.py
--- a/configs/ruby/MESI_CMP_directory.py Tue Jun 28 18:27:38 2011 -0500
+++ b/configs/ruby/MESI_CMP_directory.py Thu Jun 30 19:49:26 2011 -0500
@@ -47,7 +47,7 @@
def define_options(parser):
return
-def create_system(options, system, piobus, dma_devices):
+def create_system(options, system, piobus, dma_devices, ruby_system):
if buildEnv['PROTOCOL'] != 'MESI_CMP_directory':
panic("This script requires the MESI_CMP_directory protocol to be
built.")
@@ -88,13 +88,15 @@
cntrl_id = cntrl_count,
L1IcacheMemory = l1i_cache,
L1DcacheMemory = l1d_cache,
- l2_select_num_bits = l2_bits)
+ l2_select_num_bits = l2_bits,
+ ruby_system = ruby_system)
cpu_seq = RubySequencer(version = i,
icache = l1i_cache,
dcache = l1d_cache,
physMemPort = system.physmem.port,
- physmem = system.physmem)
+ physmem = system.physmem,
+ ruby_system = ruby_system)
l1_cntrl.sequencer = cpu_seq
@@ -123,7 +125,8 @@
l2_cntrl = L2Cache_Controller(version = i,
cntrl_id = cntrl_count,
- L2cacheMemory = l2_cache)
+ L2cacheMemory = l2_cache,
+ ruby_system = ruby_system)
exec("system.l2_cntrl%d = l2_cntrl" % i)
l2_cntrl_nodes.append(l2_cntrl)
@@ -148,9 +151,9 @@
cntrl_id = cntrl_count,
directory = \
RubyDirectoryMemory(version = i,
- size = \
- dir_size),
- memBuffer = mem_cntrl)
+ size = dir_size),
+ memBuffer = mem_cntrl,
+ ruby_system = ruby_system)
exec("system.dir_cntrl%d = dir_cntrl" % i)
dir_cntrl_nodes.append(dir_cntrl)
diff -r 4adb1148ef73 -r 5648986156db configs/ruby/MI_example.py
--- a/configs/ruby/MI_example.py Tue Jun 28 18:27:38 2011 -0500
+++ b/configs/ruby/MI_example.py Thu Jun 30 19:49:26 2011 -0500
@@ -41,7 +41,7 @@
def define_options(parser):
return
-def create_system(options, system, piobus, dma_devices):
+def create_system(options, system, piobus, dma_devices, ruby_system):
if buildEnv['PROTOCOL'] != 'MI_example':
panic("This script requires the MI_example protocol to be built.")
@@ -80,13 +80,15 @@
#
l1_cntrl = L1Cache_Controller(version = i,
cntrl_id = cntrl_count,
- cacheMemory = cache)
+ cacheMemory = cache,
+ ruby_system = ruby_system)
cpu_seq = RubySequencer(version = i,
icache = cache,
dcache = cache,
physMemPort = system.physmem.port,
- physmem = system.physmem)
+ physmem = system.physmem,
+ ruby_system = ruby_system)
l1_cntrl.sequencer = cpu_seq
@@ -125,7 +127,8 @@
use_map = options.use_map,
map_levels = \
options.map_levels),
- memBuffer = mem_cntrl)
+ memBuffer = mem_cntrl,
+ ruby_system = ruby_system)
exec("system.dir_cntrl%d = dir_cntrl" % i)
dir_cntrl_nodes.append(dir_cntrl)
diff -r 4adb1148ef73 -r 5648986156db configs/ruby/MOESI_CMP_directory.py
--- a/configs/ruby/MOESI_CMP_directory.py Tue Jun 28 18:27:38 2011 -0500
+++ b/configs/ruby/MOESI_CMP_directory.py Thu Jun 30 19:49:26 2011 -0500
@@ -47,8 +47,8 @@
def define_options(parser):
return
-def create_system(options, system, piobus, dma_devices):
-
+def create_system(options, system, piobus, dma_devices, ruby_system):
+
if buildEnv['PROTOCOL'] != 'MOESI_CMP_directory':
panic("This script requires the MOESI_CMP_directory protocol to be
built.")
@@ -88,13 +88,15 @@
cntrl_id = cntrl_count,
L1IcacheMemory = l1i_cache,
L1DcacheMemory = l1d_cache,
- l2_select_num_bits = l2_bits)
+ l2_select_num_bits = l2_bits,
+ ruby_system = ruby_system)
cpu_seq = RubySequencer(version = i,
icache = l1i_cache,
dcache = l1d_cache,
physMemPort = system.physmem.port,
- physmem = system.physmem)
+ physmem = system.physmem,
+ ruby_system = ruby_system)
l1_cntrl.sequencer = cpu_seq
@@ -122,7 +124,8 @@
l2_cntrl = L2Cache_Controller(version = i,
cntrl_id = cntrl_count,
- L2cacheMemory = l2_cache)
+ L2cacheMemory = l2_cache,
+ ruby_system = ruby_system)
exec("system.l2_cntrl%d = l2_cntrl" % i)
l2_cntrl_nodes.append(l2_cntrl)
@@ -147,9 +150,9 @@
cntrl_id = cntrl_count,
directory = \
RubyDirectoryMemory(version = i,
- size = \
- dir_size),
- memBuffer = mem_cntrl)
+ size = dir_size),
+ memBuffer = mem_cntrl,
+ ruby_system = ruby_system)
exec("system.dir_cntrl%d = dir_cntrl" % i)
dir_cntrl_nodes.append(dir_cntrl)
diff -r 4adb1148ef73 -r 5648986156db configs/ruby/MOESI_CMP_token.py
--- a/configs/ruby/MOESI_CMP_token.py Tue Jun 28 18:27:38 2011 -0500
+++ b/configs/ruby/MOESI_CMP_token.py Thu Jun 30 19:49:26 2011 -0500
@@ -54,7 +54,7 @@
parser.add_option("--allow-atomic-migration", action="store_true",
help="allow migratory sharing for atomic only accessed blocks")
-def create_system(options, system, piobus, dma_devices):
+def create_system(options, system, piobus, dma_devices, ruby_system):
if buildEnv['PROTOCOL'] != 'MOESI_CMP_token':
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev