python: Flush the simulation stdout/stderr buffers
authorBobby R. Bruce <bbruce@ucdavis.edu>
Tue, 22 Sep 2020 19:37:34 +0000 (12:37 -0700)
committerBobby R. Bruce <bbruce@ucdavis.edu>
Tue, 29 Sep 2020 17:52:15 +0000 (17:52 +0000)
Occasionally gem5's stdout/stderr, when run within the TestLib
framework, will be shuffled. This is resolved by flushing the
stdout/stderr buffer before and after simulation.

In addition to this, the verifier.py has been improved to remove
boilerplate gem5 code from the stdout comparison.

Change-Id: I04c8f9cee4475b8eab2f1ba9bb76bfa3cfcca6ec
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/34995
Reviewed-by: Jason Lowe-Power <power.jg@gmail.com>
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Maintainer: Jason Lowe-Power <power.jg@gmail.com>
Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
Tested-by: kokoro <noreply+kokoro@google.com>
13 files changed:
src/python/m5/simulate.py
tests/gem5/cpu_tests/ref/Bubblesort
tests/gem5/cpu_tests/ref/FloatMM
tests/gem5/dram-lowp/ref/simout
tests/gem5/hello_se/ref/simout
tests/gem5/insttest_se/ref/sparc/linux/insttest/simout
tests/gem5/learning_gem5/ref/hello
tests/gem5/learning_gem5/ref/hello_goodbye
tests/gem5/learning_gem5/ref/simple
tests/gem5/learning_gem5/ref/test
tests/gem5/learning_gem5/ref/threads
tests/gem5/m5threads_test_atomic/ref/sparc64/simout
tests/gem5/verifier.py

index 698dfbc62d908731605ec0a258ed74954856ffb4..080d725a122b7895a98dcf2a4f84032b4fa29a55 100644 (file)
@@ -175,7 +175,15 @@ def simulate(*args, **kwargs):
     if _drain_manager.isDrained():
         _drain_manager.resume()
 
-    return _m5.event.simulate(*args, **kwargs)
+    # We flush stdout and stderr before and after the simulation to ensure the
+    # output arrive in order.
+    sys.stdout.flush()
+    sys.stderr.flush()
+    sim_out = _m5.event.simulate(*args, **kwargs)
+    sys.stdout.flush()
+    sys.stderr.flush()
+
+    return sim_out
 
 def drain():
     """Drain the simulator in preparation of a checkpoint or memory mode
index 79d2ae3119b838a2392b68fd386f39d30b2f89e0..76f4de047b65141858a28b09e03107ab1a5e82f7 100644 (file)
@@ -1,6 +1,2 @@
-gem5 Simulator System.  http://gem5.org
-gem5 is copyrighted software; use the --copyright option for details.
-
-
 Global frequency set at 1000000000000 ticks per second
 -50000
index 6539627a2588ffcd9d72a8c693066fcdfed62d9e..0f1d582ffe55aa10e20b5e0cf592eb7af033ad0f 100644 (file)
@@ -1,6 +1,2 @@
-gem5 Simulator System.  http://gem5.org
-gem5 is copyrighted software; use the --copyright option for details.
-
-
 Global frequency set at 1000000000000 ticks per second
 -776.000061
index 5128ab4f4be3d70f8e624adaee6e5af7f2d8d4be..6fdcf8545e1443023d1d11d0a77bb9e969700527 100644 (file)
@@ -1,7 +1,3 @@
-gem5 Simulator System.  http://gem5.org
-gem5 is copyrighted software; use the --copyright option for details.
-
-
 Global frequency set at 1000000000000 ticks per second
 --- Done DRAM low power sweep ---
 Fixed params - 
index a38e2880d47dd13d258813b10846f18e52feb9bd..9e8cf2779e357d509818ead41ce430bacf428e98 100644 (file)
@@ -1,7 +1,3 @@
-gem5 Simulator System.  http://gem5.org
-gem5 is copyrighted software; use the --copyright option for details.
-
-
 Global frequency set at 1000000000000 ticks per second
 **** REAL SIMULATION ****
 Hello world!
index 466574666d6983ba9426c3efac47c3b5e0d78e6e..81a0b927dfd10d3fcd763422de32b7e6649dd328 100644 (file)
@@ -1,7 +1,3 @@
-gem5 Simulator System.  http://gem5.org
-gem5 is copyrighted software; use the --copyright option for details.
-
-
 Global frequency set at 1000000000000 ticks per second
 **** REAL SIMULATION ****
 Begining test of difficult SPARC instructions...
index 0f0a7d63f45d80ff35f8b3b374dbfb6fe989312c..bcdd7b91e08b463a0c9efb32210de1863f808763 100644 (file)
@@ -1,7 +1,3 @@
-gem5 Simulator System.  http://gem5.org
-gem5 is copyrighted software; use the --copyright option for details.
-
-
 Global frequency set at 1000000000000 ticks per second
 Beginning simulation!
 Hello world!
index 8e80377b22dff49faec674497a7d54286ffd2c72..cdaace8cead627b9558043ae39da6afc9bc4c373 100644 (file)
@@ -1,7 +1,3 @@
-gem5 Simulator System.  http://gem5.org
-gem5 is copyrighted software; use the --copyright option for details.
-
-
 Global frequency set at 1000000000000 ticks per second
 Beginning simulation!
 Exiting @ tick 10944163 because Goodbye hello!! Goodbye hello!! Goodbye hello!! Goodbye hello!! Goodbye hello!! Goodbye hello!! Goo
index b4c614a0c32dae67f915ce9adf08a87369155cd9..71a3d6284c955a3cd39b662c316efcb2a8481aac 100644 (file)
@@ -1,7 +1,3 @@
-gem5 Simulator System.  http://gem5.org
-gem5 is copyrighted software; use the --copyright option for details.
-
-
 Global frequency set at 1000000000000 ticks per second
 Hello World! From a SimObject!
 Beginning simulation!
index 794ccdd202d3f48ca36aac22fe3ec97e53ec4257..309ac2fa4047eba3fd15e2d4a08884fdc6a5dde3 100644 (file)
@@ -1,7 +1,3 @@
-gem5 Simulator System.  http://gem5.org
-gem5 is copyrighted software; use the --copyright option for details.
-
-
 Global frequency set at 1000000000 ticks per second
 Beginning simulation!
 Exiting @ tick 9981 because Ruby Tester completed
index 18a47fddb01df12862c52960562c556e722df700..841ad733f4640443f97ed2c4272499870113ee3b 100644 (file)
@@ -1,7 +1,3 @@
-gem5 Simulator System.  http://gem5.org
-gem5 is copyrighted software; use the --copyright option for details.
-
-
 Global frequency set at 1000000000000 ticks per second
 Beginning simulation!
 Running on 2 cores. with 100 values
index c6b51ca0764d76713ca639260294525b664db03c..dbe1405e5314748f370852ccc1e160b13cc41ebe 100644 (file)
@@ -1,7 +1,3 @@
-gem5 Simulator System.  http://gem5.org
-gem5 is copyrighted software; use the --copyright option for details.
-
-
 Global frequency set at 1000000000000 ticks per second
 Init done
 [Iteration 1, Thread 1] Got lock
index ba4bd4ff543269fc3e394a61f78df2462ecbd1d5..60d44f398474dc9d8a9123a1d6cdf4b8bedb438a 100644 (file)
@@ -115,6 +115,9 @@ class DerivedGoldStandard(MatchGoldStandard):
 class MatchStdout(DerivedGoldStandard):
     _file = constants.gem5_simulation_stdout
     _default_ignore_regex = [
+            re.compile('^\s+$'), # Remove blank lines.
+            re.compile('^gem5 Simulator System'),
+            re.compile('^gem5 is copyrighted software'),
             re.compile('^Redirecting (stdout|stderr) to'),
             re.compile('^gem5 version '),
             re.compile('^gem5 compiled '),