Config: Change the way options are added

I am not too happy with the way options are added in files se.py and fs.py
currently. This patch moves all the options to the file Options.py, functions
from which are called when required.
This commit is contained in:
Nilay Vaish 2012-03-28 11:01:53 -05:00
parent 6ca3af8ecf
commit 390cfc7be9
8 changed files with 161 additions and 187 deletions

View file

@ -26,96 +26,148 @@
# #
# Authors: Lisa Hsu # Authors: Lisa Hsu
# system options import m5
parser.add_option("--cpu-type", type="choice", default="atomic", from m5.defines import buildEnv
choices = ["atomic", "timing", "detailed", "inorder", from m5.objects import *
"arm_detailed"], from Benchmarks import *
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")
# Run duration options def addCommonOptions(parser):
parser.add_option("-m", "--maxtick", type="int", default=m5.MaxTick, # system options
metavar="T", parser.add_option("--cpu-type", type="choice", default="atomic",
help="Stop after T ticks") choices = ["atomic", "timing", "detailed", "inorder",
parser.add_option("--maxtime", type="float") "arm_detailed"],
parser.add_option("-I", "--maxinsts", action="store", type="int", default=None, help = "type of cpu to run with")
help="Total number of instructions to simulate (default: run forever)") parser.add_option("--checker", action="store_true");
parser.add_option("--work-item-id", action="store", type="int", parser.add_option("-n", "--num-cpus", type="int", default=1)
help="the specific work id for exit & checkpointing") parser.add_option("--caches", action="store_true")
parser.add_option("--work-begin-cpu-id-exit", action="store", type="int", parser.add_option("--l2cache", action="store_true")
help="exit when work starts on the specified cpu") parser.add_option("--fastmem", action="store_true")
parser.add_option("--work-end-exit-count", action="store", type="int", parser.add_option("--clock", action="store", type="string", default='2GHz')
help="exit at specified work end count") parser.add_option("--num-dirs", type="int", default=1)
parser.add_option("--work-begin-exit-count", action="store", type="int", parser.add_option("--num-l2caches", type="int", default=1)
help="exit at specified work begin count") parser.add_option("--num-l3caches", type="int", default=1)
parser.add_option("--init-param", action="store", type="int", default=0, parser.add_option("--l1d_size", type="string", default="64kB")
help="Parameter available in simulation with m5 initparam") 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 # Run duration options
###Note that performing checkpointing via python script files will override parser.add_option("-m", "--maxtick", type="int", default=m5.MaxTick,
###checkpoint instructions built into binaries. metavar="T", help="Stop after T ticks")
parser.add_option("--take-checkpoints", action="store", type="string", parser.add_option("--maxtime", type="float")
help="<M,N> will take checkpoint at cycle M and every N cycles thereafter") parser.add_option("-I", "--maxinsts", action="store", type="int",
parser.add_option("--max-checkpoints", action="store", type="int", default=None, help="""Total number of instructions to
help="the maximum number of checkpoints to drop", default=5) simulate (default: run forever)""")
parser.add_option("--checkpoint-dir", action="store", type="string", parser.add_option("--work-item-id", action="store", type="int",
help="Place all checkpoints in this absolute directory") help="the specific work id for exit & checkpointing")
parser.add_option("-r", "--checkpoint-restore", action="store", type="int", parser.add_option("--work-begin-cpu-id-exit", action="store", type="int",
help="restore from checkpoint <N>") help="exit when work starts on the specified cpu")
parser.add_option("--checkpoint-at-end", action="store_true", parser.add_option("--work-end-exit-count", action="store", type="int",
help="take a checkpoint at end of run") help="exit at specified work end count")
parser.add_option("--work-begin-checkpoint-count", action="store", type="int", parser.add_option("--work-begin-exit-count", action="store", type="int",
help="checkpoint at specified work begin count") help="exit at specified work begin count")
parser.add_option("--work-end-checkpoint-count", action="store", type="int", parser.add_option("--init-param", action="store", type="int", default=0,
help="checkpoint at specified work end count") help="""Parameter available in simulation with m5
parser.add_option("--work-cpus-checkpoint-count", action="store", type="int", initparam""")
help="checkpoint and exit when active cpu count is reached")
parser.add_option("--restore-with-cpu", action="store", type="choice", # Checkpointing options
default="atomic", choices = ["atomic", "timing", ###Note that performing checkpointing via python script files will override
"detailed", "inorder"], ###checkpoint instructions built into binaries.
help = "cpu type for restoring from a checkpoint") parser.add_option("--take-checkpoints", action="store", type="string",
help="<M,N> 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 <N>")
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 # CPU Switching - default switch model goes from a checkpoint
# to a timing simple CPU with caches to warm up, then to detailed CPU for # to a timing simple CPU with caches to warm up, then to detailed CPU for
# data measurement # data measurement
parser.add_option("-s", "--standard-switch", action="store_true", parser.add_option("-s", "--standard-switch", action="store_true",
help="switch from timing CPU to Detailed CPU") help="switch from timing CPU to Detailed CPU")
parser.add_option("-w", "--warmup", action="store", type="int", parser.add_option("-w", "--warmup", action="store", type="int",
help="if -s, then this is the warmup period. else, this is ignored", help="if -s, then this is the warmup period. else, this is ignored",
default=5000000000) default=5000000000)
parser.add_option("-p", "--prog-interval", type="int", help="CPU Progress Interval") parser.add_option("-p", "--prog-interval", type="int",
help="CPU Progress Interval")
# Fastforwarding and simpoint related materials # Fastforwarding and simpoint related materials
parser.add_option("-W", "--warmup-insts", action="store", type="int", parser.add_option("-W", "--warmup-insts", action="store", type="int",
default=None, default=None,
help="Warmup period in total instructions (requires --standard-switch)") help="Warmup period in total instructions (requires --standard-switch)")
parser.add_option("--bench", action="store", type="string", default=None, parser.add_option("--bench", action="store", type="string", default=None,
help="base names for --take-checkpoint and --checkpoint-restore") help="base names for --take-checkpoint and --checkpoint-restore")
parser.add_option("-F", "--fast-forward", action="store", type="string", parser.add_option("-F", "--fast-forward", action="store", type="string",
default=None, default=None,
help="Number of instructions to fast forward before switching") help="Number of instructions to fast forward before switching")
parser.add_option("-S", "--simpoint", action="store_true", default=False, parser.add_option("-S", "--simpoint", action="store_true", default=False,
help="""Use workload simpoints as an instruction offset for help="""Use workload simpoints as an instruction offset for
--checkpoint-restore or --take-checkpoint.""") --checkpoint-restore or --take-checkpoint.""")
parser.add_option("--at-instruction", action="store_true", default=False, parser.add_option("--at-instruction", action="store_true", default=False,
help="""Treate value of --checkpoint-restore or --take-checkpoint as a help="""Treat value of --checkpoint-restore or --take-checkpoint as a
number of instructions.""") 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")

View file

@ -39,7 +39,6 @@
# Authors: Ali Saidi # Authors: Ali Saidi
import optparse import optparse
import os
import sys import sys
import m5 import m5
@ -55,43 +54,11 @@ from Benchmarks import *
import Simulation import Simulation
import CacheConfig import CacheConfig
from Caches import * from Caches import *
import Options
# 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() parser = optparse.OptionParser()
Options.addCommonOptions(parser)
# Simulation options Options.addFSOptions(parser)
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, args) = parser.parse_args() (options, args) = parser.parse_args()

View file

@ -31,9 +31,7 @@
# #
import optparse import optparse
import os
import sys import sys
from os.path import join as joinpath
import m5 import m5
from m5.defines import buildEnv from m5.defines import buildEnv
@ -48,35 +46,16 @@ import Ruby
from FSConfig import * from FSConfig import *
from SysPaths import * from SysPaths import *
from Benchmarks import * from Benchmarks import *
import Options
import Simulation 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() parser = optparse.OptionParser()
# System options Options.addCommonOptions(parser)
parser.add_option("--kernel", action="store", type="string") Options.addFSOptions(parser)
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.")
#
# Add the ruby specific and protocol specific options # Add the ruby specific and protocol specific options
#
Ruby.define_options(parser) Ruby.define_options(parser)
execfile(os.path.join(config_root, "common", "Options.py"))
(options, args) = parser.parse_args() (options, args) = parser.parse_args()
options.ruby = True options.ruby = True

View file

@ -42,10 +42,8 @@
# #
# "m5 test.py" # "m5 test.py"
import os
import optparse import optparse
import sys import sys
from os.path import join as joinpath
import m5 import m5
from m5.defines import buildEnv from m5.defines import buildEnv
@ -55,32 +53,16 @@ from m5.util import addToPath, fatal
addToPath('../common') addToPath('../common')
addToPath('../ruby') addToPath('../ruby')
import Options
import Ruby import Ruby
import Simulation import Simulation
import CacheConfig import CacheConfig
from Caches import * from Caches import *
from cpu2000 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() parser = optparse.OptionParser()
Options.addCommonOptions(parser)
# Benchmark options Options.addSEOptions(parser)
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"))
if '--ruby' in sys.argv: if '--ruby' in sys.argv:
Ruby.define_options(parser) Ruby.define_options(parser)
@ -110,11 +92,14 @@ if options.bench:
except: except:
print >>sys.stderr, "Unable to find workload for %s: %s" % (buildEnv['TARGET_ISA'], app) print >>sys.stderr, "Unable to find workload for %s: %s" % (buildEnv['TARGET_ISA'], app)
sys.exit(1) sys.exit(1)
else: elif options.cmd:
process = LiveProcess() process = LiveProcess()
process.executable = options.cmd process.executable = options.cmd
process.cmd = [options.cmd] + options.options.split() process.cmd = [options.cmd] + options.options.split()
multiprocesses.append(process) multiprocesses.append(process)
else:
print >> sys.stderr, "No workload specified. Exiting!\n"
sys.exit(1)
if options.input != "": if options.input != "":

View file

@ -41,16 +41,14 @@ addToPath(config_root+'/configs/common')
addToPath(config_root+'/configs/ruby') addToPath(config_root+'/configs/ruby')
import Ruby import Ruby
import Options
parser = optparse.OptionParser() parser = optparse.OptionParser()
Options.addCommonOptions(parser)
#
# Add the ruby specific and protocol specific options # Add the ruby specific and protocol specific options
#
Ruby.define_options(parser) Ruby.define_options(parser)
execfile(os.path.join(config_root, "configs/common", "Options.py"))
(options, args) = parser.parse_args() (options, args) = parser.parse_args()
# #

View file

@ -42,16 +42,14 @@ addToPath(config_root+'/configs/common')
addToPath(config_root+'/configs/ruby') addToPath(config_root+'/configs/ruby')
import Ruby import Ruby
import Options
parser = optparse.OptionParser() parser = optparse.OptionParser()
Options.addCommonOptions(parser)
#
# Add the ruby specific and protocol specific options # Add the ruby specific and protocol specific options
#
Ruby.define_options(parser) Ruby.define_options(parser)
execfile(os.path.join(config_root, "configs/common", "Options.py"))
(options, args) = parser.parse_args() (options, args) = parser.parse_args()
# #

View file

@ -39,17 +39,15 @@ m5_root = os.path.dirname(config_root)
addToPath(config_root+'/configs/common') addToPath(config_root+'/configs/common')
addToPath(config_root+'/configs/ruby') addToPath(config_root+'/configs/ruby')
import Options
import Ruby import Ruby
parser = optparse.OptionParser() parser = optparse.OptionParser()
Options.addCommonOptions(parser)
#
# Add the ruby specific and protocol specific options # Add the ruby specific and protocol specific options
#
Ruby.define_options(parser) Ruby.define_options(parser)
execfile(os.path.join(config_root, "configs/common", "Options.py"))
(options, args) = parser.parse_args() (options, args) = parser.parse_args()
# #

View file

@ -35,21 +35,18 @@ import os, optparse, sys
# Get paths we might need # Get paths we might need
config_path = os.path.dirname(os.path.abspath(__file__)) config_path = os.path.dirname(os.path.abspath(__file__))
config_root = os.path.dirname(config_path) config_root = os.path.dirname(config_path)
m5_root = os.path.dirname(config_root)
addToPath(config_root+'/configs/common') addToPath(config_root+'/configs/common')
addToPath(config_root+'/configs/ruby') addToPath(config_root+'/configs/ruby')
import Ruby import Ruby
import Options
parser = optparse.OptionParser() parser = optparse.OptionParser()
Options.addCommonOptions(parser)
#
# Add the ruby specific and protocol specific options # Add the ruby specific and protocol specific options
#
Ruby.define_options(parser) Ruby.define_options(parser)
execfile(os.path.join(config_root, "configs/common", "Options.py"))
(options, args) = parser.parse_args() (options, args) = parser.parse_args()
# #