parser.add_option("--ruby", action="store_true")
# 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("-m", "--abs-max-tick", type="int", default=None,
+ metavar="TICKS", help="Run to absolute simulated tick " \
+ "specified including ticks from a restored checkpoint")
+ parser.add_option("--rel-max-tick", type="int", default=None,
+ metavar="TICKS", help="Simulate for specified number of" \
+ " ticks relative to the simulation start tick (e.g. if " \
+ "restoring a checkpoint)")
+ parser.add_option("--maxtime", type="float", default=None,
+ help="Run to the specified absolute simulated time in " \
+ "seconds")
parser.add_option("-I", "--maxinsts", action="store", type="int",
default=None, help="""Total number of instructions to
simulate (default: run forever)""")
if options.work_cpus_checkpoint_count != None:
system.work_cpus_ckpt_count = options.work_cpus_checkpoint_count
-def findCptDir(options, maxtick, cptdir, testsys):
+def findCptDir(options, cptdir, testsys):
"""Figures out the directory from which the checkpointed state is read.
There are two different ways in which the directories holding checkpoints
This function parses through the options to figure out which one of the
above should be used for selecting the checkpoint, and then figures out
the appropriate directory.
-
- It also sets the value of the maximum tick value till which the simulation
- will run.
"""
from os.path import isdir, exists
if cpt_num > len(cpts):
fatal('Checkpoint %d not found', cpt_num)
- maxtick = maxtick - int(cpts[cpt_num - 1])
+ cpt_starttick = int(cpts[cpt_num - 1])
checkpoint_dir = joinpath(cptdir, "cpt.%s" % cpts[cpt_num - 1])
- return maxtick, checkpoint_dir
+ return cpt_starttick, checkpoint_dir
def scriptCheckpoints(options, maxtick, cptdir):
if options.at_instruction or options.simpoint:
return exit_event
def run(options, root, testsys, cpu_class):
- if options.maxtick:
- maxtick = options.maxtick
- elif options.maxtime:
- simtime = m5.ticks.seconds(simtime)
- print "simulating for: ", simtime
- maxtick = simtime
- else:
- maxtick = m5.MaxTick
-
if options.checkpoint_dir:
cptdir = options.checkpoint_dir
elif m5.options.outdir:
testsys.cpu[i].max_insts_any_thread = offset
checkpoint_dir = None
- if options.checkpoint_restore != None:
- maxtick, checkpoint_dir = findCptDir(options, maxtick, cptdir, testsys)
+ if options.checkpoint_restore:
+ cpt_starttick, checkpoint_dir = findCptDir(options, cptdir, testsys)
m5.instantiate(checkpoint_dir)
+ # Handle the max tick settings now that tick frequency was resolved
+ # during system instantiation
+ # NOTE: the maxtick variable here is in absolute ticks, so it must
+ # include any simulated ticks before a checkpoint
+ explicit_maxticks = 0
+ maxtick_from_abs = m5.MaxTick
+ maxtick_from_rel = m5.MaxTick
+ maxtick_from_maxtime = m5.MaxTick
+ if options.abs_max_tick:
+ maxtick_from_abs = options.abs_max_tick
+ explicit_maxticks += 1
+ if options.rel_max_tick:
+ maxtick_from_rel = options.rel_max_tick
+ if options.checkpoint_restore:
+ # NOTE: this may need to be updated if checkpoints ever store
+ # the ticks per simulated second
+ maxtick_from_rel += cpt_starttick
+ explicit_maxticks += 1
+ if options.maxtime:
+ maxtick_from_maxtime = m5.ticks.fromSeconds(options.maxtime)
+ explicit_maxticks += 1
+ if explicit_maxticks > 1:
+ warn("Specified multiple of --abs-max-tick, --rel-max-tick, --maxtime."\
+ " Using least")
+ maxtick = min([maxtick_from_abs, maxtick_from_rel, maxtick_from_maxtime])
+
+ if options.checkpoint_restore != None and maxtick < cpt_starttick:
+ fatal("Bad maxtick (%d) specified: " \
+ "Checkpoint starts starts from tick: %d", maxtick, cpt_starttick)
+
if options.standard_switch or cpu_class:
if options.standard_switch:
print "Switch at instruction count:%s" % \