diff --git a/configs/common/Options.py b/configs/common/Options.py index f7514d086..d22b3ab3c 100644 --- a/configs/common/Options.py +++ b/configs/common/Options.py @@ -26,96 +26,148 @@ # # Authors: Lisa Hsu -# system options -parser.add_option("--cpu-type", type="choice", default="atomic", - choices = ["atomic", "timing", "detailed", "inorder", - "arm_detailed"], - help = "type of cpu to run with") -parser.add_option("--checker", action="store_true"); -parser.add_option("-n", "--num-cpus", type="int", default=1) -parser.add_option("--caches", action="store_true") -parser.add_option("--l2cache", action="store_true") -parser.add_option("--fastmem", action="store_true") -parser.add_option("--clock", action="store", type="string", default='2GHz') -parser.add_option("--num-dirs", type="int", default=1) -parser.add_option("--num-l2caches", type="int", default=1) -parser.add_option("--num-l3caches", type="int", default=1) -parser.add_option("--l1d_size", type="string", default="64kB") -parser.add_option("--l1i_size", type="string", default="32kB") -parser.add_option("--l2_size", type="string", default="2MB") -parser.add_option("--l3_size", type="string", default="16MB") -parser.add_option("--l1d_assoc", type="int", default=2) -parser.add_option("--l1i_assoc", type="int", default=2) -parser.add_option("--l2_assoc", type="int", default=8) -parser.add_option("--l3_assoc", type="int", default=16) -parser.add_option("--cacheline_size", type="int", default=64) -parser.add_option("--ruby", action="store_true") +import m5 +from m5.defines import buildEnv +from m5.objects import * +from Benchmarks import * -# Run duration options -parser.add_option("-m", "--maxtick", type="int", default=m5.MaxTick, - metavar="T", - help="Stop after T ticks") -parser.add_option("--maxtime", type="float") -parser.add_option("-I", "--maxinsts", action="store", type="int", default=None, - help="Total number of instructions to simulate (default: run forever)") -parser.add_option("--work-item-id", action="store", type="int", - help="the specific work id for exit & checkpointing") -parser.add_option("--work-begin-cpu-id-exit", action="store", type="int", - help="exit when work starts on the specified cpu") -parser.add_option("--work-end-exit-count", action="store", type="int", - help="exit at specified work end count") -parser.add_option("--work-begin-exit-count", action="store", type="int", - help="exit at specified work begin count") -parser.add_option("--init-param", action="store", type="int", default=0, - help="Parameter available in simulation with m5 initparam") +def addCommonOptions(parser): + # system options + parser.add_option("--cpu-type", type="choice", default="atomic", + choices = ["atomic", "timing", "detailed", "inorder", + "arm_detailed"], + help = "type of cpu to run with") + parser.add_option("--checker", action="store_true"); + parser.add_option("-n", "--num-cpus", type="int", default=1) + parser.add_option("--caches", action="store_true") + parser.add_option("--l2cache", action="store_true") + parser.add_option("--fastmem", action="store_true") + parser.add_option("--clock", action="store", type="string", default='2GHz') + parser.add_option("--num-dirs", type="int", default=1) + parser.add_option("--num-l2caches", type="int", default=1) + parser.add_option("--num-l3caches", type="int", default=1) + parser.add_option("--l1d_size", type="string", default="64kB") + parser.add_option("--l1i_size", type="string", default="32kB") + parser.add_option("--l2_size", type="string", default="2MB") + parser.add_option("--l3_size", type="string", default="16MB") + parser.add_option("--l1d_assoc", type="int", default=2) + parser.add_option("--l1i_assoc", type="int", default=2) + parser.add_option("--l2_assoc", type="int", default=8) + parser.add_option("--l3_assoc", type="int", default=16) + parser.add_option("--cacheline_size", type="int", default=64) + parser.add_option("--ruby", action="store_true") -# Checkpointing options -###Note that performing checkpointing via python script files will override -###checkpoint instructions built into binaries. -parser.add_option("--take-checkpoints", action="store", type="string", - help=" will take checkpoint at cycle M and every N cycles thereafter") -parser.add_option("--max-checkpoints", action="store", type="int", - help="the maximum number of checkpoints to drop", default=5) -parser.add_option("--checkpoint-dir", action="store", type="string", - help="Place all checkpoints in this absolute directory") -parser.add_option("-r", "--checkpoint-restore", action="store", type="int", - help="restore from checkpoint ") -parser.add_option("--checkpoint-at-end", action="store_true", - help="take a checkpoint at end of run") -parser.add_option("--work-begin-checkpoint-count", action="store", type="int", - help="checkpoint at specified work begin count") -parser.add_option("--work-end-checkpoint-count", action="store", type="int", - help="checkpoint at specified work end count") -parser.add_option("--work-cpus-checkpoint-count", action="store", type="int", - help="checkpoint and exit when active cpu count is reached") -parser.add_option("--restore-with-cpu", action="store", type="choice", - default="atomic", choices = ["atomic", "timing", - "detailed", "inorder"], - help = "cpu type for restoring from a checkpoint") + # Run duration options + parser.add_option("-m", "--maxtick", type="int", default=m5.MaxTick, + metavar="T", help="Stop after T ticks") + parser.add_option("--maxtime", type="float") + parser.add_option("-I", "--maxinsts", action="store", type="int", + default=None, help="""Total number of instructions to + simulate (default: run forever)""") + parser.add_option("--work-item-id", action="store", type="int", + help="the specific work id for exit & checkpointing") + parser.add_option("--work-begin-cpu-id-exit", action="store", type="int", + help="exit when work starts on the specified cpu") + parser.add_option("--work-end-exit-count", action="store", type="int", + help="exit at specified work end count") + parser.add_option("--work-begin-exit-count", action="store", type="int", + help="exit at specified work begin count") + parser.add_option("--init-param", action="store", type="int", default=0, + help="""Parameter available in simulation with m5 + initparam""") + + # Checkpointing options + ###Note that performing checkpointing via python script files will override + ###checkpoint instructions built into binaries. + parser.add_option("--take-checkpoints", action="store", type="string", + help=" will take checkpoint at cycle M and every N cycles thereafter") + parser.add_option("--max-checkpoints", action="store", type="int", + help="the maximum number of checkpoints to drop", default=5) + parser.add_option("--checkpoint-dir", action="store", type="string", + help="Place all checkpoints in this absolute directory") + parser.add_option("-r", "--checkpoint-restore", action="store", type="int", + help="restore from checkpoint ") + parser.add_option("--checkpoint-at-end", action="store_true", + help="take a checkpoint at end of run") + parser.add_option("--work-begin-checkpoint-count", action="store", type="int", + help="checkpoint at specified work begin count") + parser.add_option("--work-end-checkpoint-count", action="store", type="int", + help="checkpoint at specified work end count") + parser.add_option("--work-cpus-checkpoint-count", action="store", type="int", + help="checkpoint and exit when active cpu count is reached") + parser.add_option("--restore-with-cpu", action="store", type="choice", + default="atomic", choices = ["atomic", "timing", + "detailed", "inorder"], + help = "cpu type for restoring from a checkpoint") -# CPU Switching - default switch model goes from a checkpoint -# to a timing simple CPU with caches to warm up, then to detailed CPU for -# data measurement -parser.add_option("-s", "--standard-switch", action="store_true", - help="switch from timing CPU to Detailed CPU") -parser.add_option("-w", "--warmup", action="store", type="int", - help="if -s, then this is the warmup period. else, this is ignored", - default=5000000000) -parser.add_option("-p", "--prog-interval", type="int", help="CPU Progress Interval") + # CPU Switching - default switch model goes from a checkpoint + # to a timing simple CPU with caches to warm up, then to detailed CPU for + # data measurement + parser.add_option("-s", "--standard-switch", action="store_true", + help="switch from timing CPU to Detailed CPU") + parser.add_option("-w", "--warmup", action="store", type="int", + help="if -s, then this is the warmup period. else, this is ignored", + default=5000000000) + parser.add_option("-p", "--prog-interval", type="int", + help="CPU Progress Interval") -# Fastforwarding and simpoint related materials -parser.add_option("-W", "--warmup-insts", action="store", type="int", - default=None, - help="Warmup period in total instructions (requires --standard-switch)") -parser.add_option("--bench", action="store", type="string", default=None, - help="base names for --take-checkpoint and --checkpoint-restore") -parser.add_option("-F", "--fast-forward", action="store", type="string", - default=None, - help="Number of instructions to fast forward before switching") -parser.add_option("-S", "--simpoint", action="store_true", default=False, - help="""Use workload simpoints as an instruction offset for ---checkpoint-restore or --take-checkpoint.""") -parser.add_option("--at-instruction", action="store_true", default=False, - help="""Treate value of --checkpoint-restore or --take-checkpoint as a -number of instructions.""") + # Fastforwarding and simpoint related materials + parser.add_option("-W", "--warmup-insts", action="store", type="int", + default=None, + help="Warmup period in total instructions (requires --standard-switch)") + parser.add_option("--bench", action="store", type="string", default=None, + help="base names for --take-checkpoint and --checkpoint-restore") + parser.add_option("-F", "--fast-forward", action="store", type="string", + default=None, + help="Number of instructions to fast forward before switching") + parser.add_option("-S", "--simpoint", action="store_true", default=False, + help="""Use workload simpoints as an instruction offset for + --checkpoint-restore or --take-checkpoint.""") + parser.add_option("--at-instruction", action="store_true", default=False, + help="""Treat value of --checkpoint-restore or --take-checkpoint as a + number of instructions.""") + +def addSEOptions(parser): + # Benchmark options + parser.add_option("-c", "--cmd", default="", + help="The binary to run in syscall emulation mode.") + parser.add_option("-o", "--options", default="", + help="""The options to pass to the binary, use " " + around the entire string""") + parser.add_option("-i", "--input", default="", + help="Read stdin from a file.") + parser.add_option("--output", default="", + help="Redirect stdout to a file.") + parser.add_option("--errout", default="", + help="Redirect stderr to a file.") + +def addFSOptions(parser): + # Simulation options + parser.add_option("--timesync", action="store_true", + help="Prevent simulated time from getting ahead of real time") + + # System options + parser.add_option("--kernel", action="store", type="string") + parser.add_option("--script", action="store", type="string") + parser.add_option("--frame-capture", action="store_true", + help="Stores changed frame buffers from the VNC server to compressed "\ + "files in the gem5 output directory") + + if buildEnv['TARGET_ISA'] == "arm": + parser.add_option("--bare-metal", action="store_true", + help="Provide the raw system without the linux specific bits") + parser.add_option("--machine-type", action="store", type="choice", + choices=ArmMachineType.map.keys(), default="RealView_PBX") + # Benchmark options + parser.add_option("--dual", action="store_true", + help="Simulate two systems attached with an ethernet link") + parser.add_option("-b", "--benchmark", action="store", type="string", + dest="benchmark", + help="Specify the benchmark to run. Available benchmarks: %s"\ + % DefinedBenchmarks) + + # Metafile options + parser.add_option("--etherdump", action="store", type="string", dest="etherdump", + help="Specify the filename to dump a pcap capture of the" \ + "ethernet traffic") diff --git a/configs/example/fs.py b/configs/example/fs.py index 8b27f25c1..4b6956b72 100644 --- a/configs/example/fs.py +++ b/configs/example/fs.py @@ -39,7 +39,6 @@ # Authors: Ali Saidi import optparse -import os import sys import m5 @@ -55,43 +54,11 @@ from Benchmarks import * import Simulation import CacheConfig from Caches import * - -# Get paths we might need. It's expected this file is in m5/configs/example. -config_path = os.path.dirname(os.path.abspath(__file__)) -config_root = os.path.dirname(config_path) +import Options parser = optparse.OptionParser() - -# Simulation options -parser.add_option("--timesync", action="store_true", - help="Prevent simulated time from getting ahead of real time") - -# System options -parser.add_option("--kernel", action="store", type="string") -parser.add_option("--script", action="store", type="string") -parser.add_option("--frame-capture", action="store_true", - help="Stores changed frame buffers from the VNC server to compressed "\ - "files in the gem5 output directory") - -if buildEnv['TARGET_ISA'] == "arm": - parser.add_option("--bare-metal", action="store_true", - help="Provide the raw system without the linux specific bits") - parser.add_option("--machine-type", action="store", type="choice", - choices=ArmMachineType.map.keys(), default="RealView_PBX") -# Benchmark options -parser.add_option("--dual", action="store_true", - help="Simulate two systems attached with an ethernet link") -parser.add_option("-b", "--benchmark", action="store", type="string", - dest="benchmark", - help="Specify the benchmark to run. Available benchmarks: %s"\ - % DefinedBenchmarks) - -# Metafile options -parser.add_option("--etherdump", action="store", type="string", dest="etherdump", - help="Specify the filename to dump a pcap capture of the" \ - "ethernet traffic") - -execfile(os.path.join(config_root, "common", "Options.py")) +Options.addCommonOptions(parser) +Options.addFSOptions(parser) (options, args) = parser.parse_args() diff --git a/configs/example/ruby_fs.py b/configs/example/ruby_fs.py index ac7587bf5..b5ce643b9 100644 --- a/configs/example/ruby_fs.py +++ b/configs/example/ruby_fs.py @@ -31,9 +31,7 @@ # import optparse -import os import sys -from os.path import join as joinpath import m5 from m5.defines import buildEnv @@ -48,35 +46,16 @@ import Ruby from FSConfig import * from SysPaths import * from Benchmarks import * +import Options import Simulation -from Caches import * - -# Get paths we might need. It's expected this file is in m5/configs/example. -config_path = os.path.dirname(os.path.abspath(__file__)) -config_root = os.path.dirname(config_path) parser = optparse.OptionParser() -# System options -parser.add_option("--kernel", action="store", type="string") -parser.add_option("--script", action="store", type="string") -# Benchmark options -parser.add_option("-b", "--benchmark", action="store", type="string", - dest="benchmark", - help="Specify the benchmark to run. Available benchmarks: %s"\ - % DefinedBenchmarks) -parser.add_option("-o", "--options", default="", - help='The options to pass to the binary, use " " around the entire string') -parser.add_option("-i", "--input", default="", help="Read stdin from a file.") -parser.add_option("--output", default="", help="Redirect stdout to a file.") -parser.add_option("--errout", default="", help="Redirect stderr to a file.") +Options.addCommonOptions(parser) +Options.addFSOptions(parser) -# # Add the ruby specific and protocol specific options -# Ruby.define_options(parser) -execfile(os.path.join(config_root, "common", "Options.py")) - (options, args) = parser.parse_args() options.ruby = True diff --git a/configs/example/se.py b/configs/example/se.py index b1e6ae142..a6cf1ec19 100644 --- a/configs/example/se.py +++ b/configs/example/se.py @@ -42,10 +42,8 @@ # # "m5 test.py" -import os import optparse import sys -from os.path import join as joinpath import m5 from m5.defines import buildEnv @@ -55,32 +53,16 @@ from m5.util import addToPath, fatal addToPath('../common') addToPath('../ruby') +import Options import Ruby - import Simulation import CacheConfig from Caches import * from cpu2000 import * -# Get paths we might need. It's expected this file is in m5/configs/example. -config_path = os.path.dirname(os.path.abspath(__file__)) -config_root = os.path.dirname(config_path) -m5_root = os.path.dirname(config_root) - parser = optparse.OptionParser() - -# Benchmark options -parser.add_option("-c", "--cmd", - default=joinpath(m5_root, "tests/test-progs/hello/bin/%s/linux/hello" % \ - buildEnv['TARGET_ISA']), - help="The binary to run in syscall emulation mode.") -parser.add_option("-o", "--options", default="", - help='The options to pass to the binary, use " " around the entire string') -parser.add_option("-i", "--input", default="", help="Read stdin from a file.") -parser.add_option("--output", default="", help="Redirect stdout to a file.") -parser.add_option("--errout", default="", help="Redirect stderr to a file.") - -execfile(os.path.join(config_root, "common", "Options.py")) +Options.addCommonOptions(parser) +Options.addSEOptions(parser) if '--ruby' in sys.argv: Ruby.define_options(parser) @@ -110,11 +92,14 @@ if options.bench: except: print >>sys.stderr, "Unable to find workload for %s: %s" % (buildEnv['TARGET_ISA'], app) sys.exit(1) -else: +elif options.cmd: process = LiveProcess() process.executable = options.cmd process.cmd = [options.cmd] + options.options.split() multiprocesses.append(process) +else: + print >> sys.stderr, "No workload specified. Exiting!\n" + sys.exit(1) if options.input != "": diff --git a/tests/configs/memtest-ruby.py b/tests/configs/memtest-ruby.py index e2c59497e..c69e1bf00 100644 --- a/tests/configs/memtest-ruby.py +++ b/tests/configs/memtest-ruby.py @@ -41,16 +41,14 @@ addToPath(config_root+'/configs/common') addToPath(config_root+'/configs/ruby') import Ruby +import Options parser = optparse.OptionParser() +Options.addCommonOptions(parser) -# # Add the ruby specific and protocol specific options -# Ruby.define_options(parser) -execfile(os.path.join(config_root, "configs/common", "Options.py")) - (options, args) = parser.parse_args() # diff --git a/tests/configs/rubytest-ruby.py b/tests/configs/rubytest-ruby.py index c53ed26bd..70deb2958 100644 --- a/tests/configs/rubytest-ruby.py +++ b/tests/configs/rubytest-ruby.py @@ -42,16 +42,14 @@ addToPath(config_root+'/configs/common') addToPath(config_root+'/configs/ruby') import Ruby +import Options parser = optparse.OptionParser() +Options.addCommonOptions(parser) -# # Add the ruby specific and protocol specific options -# Ruby.define_options(parser) -execfile(os.path.join(config_root, "configs/common", "Options.py")) - (options, args) = parser.parse_args() # diff --git a/tests/configs/simple-timing-mp-ruby.py b/tests/configs/simple-timing-mp-ruby.py index 9919cabcb..d2f11abce 100644 --- a/tests/configs/simple-timing-mp-ruby.py +++ b/tests/configs/simple-timing-mp-ruby.py @@ -39,17 +39,15 @@ m5_root = os.path.dirname(config_root) addToPath(config_root+'/configs/common') addToPath(config_root+'/configs/ruby') +import Options import Ruby parser = optparse.OptionParser() +Options.addCommonOptions(parser) -# # Add the ruby specific and protocol specific options -# Ruby.define_options(parser) -execfile(os.path.join(config_root, "configs/common", "Options.py")) - (options, args) = parser.parse_args() # diff --git a/tests/configs/simple-timing-ruby.py b/tests/configs/simple-timing-ruby.py index 8339e0e9a..19e827c80 100644 --- a/tests/configs/simple-timing-ruby.py +++ b/tests/configs/simple-timing-ruby.py @@ -35,21 +35,18 @@ import os, optparse, sys # Get paths we might need config_path = os.path.dirname(os.path.abspath(__file__)) config_root = os.path.dirname(config_path) -m5_root = os.path.dirname(config_root) addToPath(config_root+'/configs/common') addToPath(config_root+'/configs/ruby') import Ruby +import Options parser = optparse.OptionParser() +Options.addCommonOptions(parser) -# # Add the ruby specific and protocol specific options -# Ruby.define_options(parser) -execfile(os.path.join(config_root, "configs/common", "Options.py")) - (options, args) = parser.parse_args() #