summaryrefslogtreecommitdiff
path: root/configs/example
diff options
context:
space:
mode:
authorGabe Black <gblack@eecs.umich.edu>2011-01-19 11:48:00 -0800
committerGabe Black <gblack@eecs.umich.edu>2011-01-19 11:48:00 -0800
commita368fba7d4fa01b58d5c2d9b3cafd56e1102287c (patch)
tree02c8d6444104f785014fda27c966e7a82d21d766 /configs/example
parentf7885b8f260ca11c2f4a405525d9fc4e554f41a8 (diff)
downloadgem5-a368fba7d4fa01b58d5c2d9b3cafd56e1102287c.tar.xz
Time: Add a mechanism to prevent M5 from running faster than real time.
M5 skips over any simulated time where it doesn't have any work to do. When the simulation is active, the time skipped is short and the work done at any point in time is relatively substantial. If the time between events is long and/or the work to do at each event is small, it's possible for simulated time to pass faster than real time. When running a benchmark that can be good because it means the simulation will finish sooner in real time. When interacting with the real world through, for instance, a serial terminal or bridge to a real network, this can be a problem. Human or network response time could be greatly exagerated from the perspective of the simulation and make simulated events happen "too soon" from an external perspective. This change adds the capability to force the simulation to run no faster than real time. It does so by scheduling a periodic event that checks to see if its simulated period is shorter than its real period. If it is, it stalls the simulation until they're equal. This is called time syncing. A future change could add pseudo instructions which turn time syncing on and off from within the simulation. That would allow time syncing to be used for the interactive parts of a session but then turned off when running a benchmark using the m5 utility program inside a script. Time syncing would probably not happen anyway while running a benchmark because there would be plenty of work for M5 to do, but the event overhead could be avoided.
Diffstat (limited to 'configs/example')
-rw-r--r--configs/example/fs.py7
1 files changed, 7 insertions, 0 deletions
diff --git a/configs/example/fs.py b/configs/example/fs.py
index a45b48c76..e9bc9afb6 100644
--- a/configs/example/fs.py
+++ b/configs/example/fs.py
@@ -65,6 +65,10 @@ config_root = os.path.dirname(config_path)
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")
@@ -187,4 +191,7 @@ else:
print "Error I don't know how to create more than 2 systems."
sys.exit(1)
+if options.timesync:
+ root.time_sync_enable = True
+
Simulation.run(options, root, test_sys, FutureClass)