Disable timer-based context switches
authorSebastian Graf <sebastian.graf@kit.edu>
Sun, 30 Dec 2018 18:17:59 +0000 (19:17 +0100)
committerSebastian Graf <sgraf1337@gmail.com>
Tue, 1 Jan 2019 17:48:54 +0000 (18:48 +0100)
Summary:
In the past, we repeatedly had problems with non-deterministic allocations due to stack squeezing during context switches (#4450, #8611).
This patch adds `+RTS -V0 -RTS` as extra `RUNTEST_OPTS` for every single-threaded benchmark.

Is this the right place to add the flags? Should we also do this for all the other benchmarks?

Reviewers: simonmar, osa1, nomeata, O26 nofib

GHC Trac Issues: #8611

Differential Revision: https://phabricator.haskell.org/D5470

mk/opts.mk

index 80fb957..be20125 100644 (file)
@@ -17,7 +17,16 @@ RUNTEST_OPTS       = $(SRC_RUNTEST_OPTS) $(WAY$(_way)_RUNTEST_OPTS) \
 
 ifneq "$(way)" "mp"
 # if testing GUM don't generate a -S style log file; it may well differ 
-SRC_RUNTEST_OPTS += -ghc-timing 
+SRC_RUNTEST_OPTS += -ghc-timing
+
+# Deactivate context switches to guarantee deterministic allocation
+# measurements. See Trac #8611.
+# We might want this to also happen in the "mp" way. I left it here,
+# assuming that "mp" (probably for multi-processor system) entails
+# nondeterministic measurements anyway, but I don't really know enough
+# about this to make substantiated claims.
+SRC_RUNTEST_OPTS += +RTS -V0 -RTS
+
 endif
 # SRC_RUNTEST_OPTS += +RTS -H10m -K10m -RTS