summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÖmer Sinan Ağacan <omeragacan@gmail.com>2020-01-20 11:35:28 +0300
committerMarge Bot <ben+marge-bot@smart-cactus.org>2020-02-05 09:22:10 -0500
commit6d3b5d5706a8fcfe724ee0a042d5f7c18880ccba (patch)
tree596f715d0b77269b7b5fe9541bcbe473272e43cb
parentc90eca550ccf89c8eb880e4428a43a9d0e8203f0 (diff)
downloadhaskell-6d3b5d5706a8fcfe724ee0a042d5f7c18880ccba.tar.gz
testlib: Extend existing *_opts in extra_*_opts
Previously we'd override the existing {run,hc} opts in extra_{run,hc}_opts, which caused flakiness in T1969, see #17712. extra_{run,hc}_opts now extends {run,hc} opts, instead of overriding. Also we shrank the allocation area for T1969 in order to increase residency sampling frequency. Fixes #17712
-rw-r--r--testsuite/driver/testlib.py10
-rw-r--r--testsuite/tests/perf/compiler/all.T7
2 files changed, 10 insertions, 7 deletions
diff --git a/testsuite/driver/testlib.py b/testsuite/driver/testlib.py
index a4960e83bd..965350f56b 100644
--- a/testsuite/driver/testlib.py
+++ b/testsuite/driver/testlib.py
@@ -393,7 +393,7 @@ def extra_run_opts( val ):
return lambda name, opts, v=val: _extra_run_opts(name, opts, v);
def _extra_run_opts( name, opts, v ):
- opts.extra_run_opts = v
+ opts.extra_run_opts += " " + v
# -----
@@ -401,7 +401,7 @@ def extra_hc_opts( val ):
return lambda name, opts, v=val: _extra_hc_opts(name, opts, v);
def _extra_hc_opts( name, opts, v ):
- opts.extra_hc_opts = v
+ opts.extra_hc_opts += " " + v
# -----
@@ -567,13 +567,15 @@ def llvm_build ( ) -> bool:
# appears to change (up or down) when the underlying profile hasn't
# really changed. To further minimize this effect we run with a single
# generation (meaning we get a residency sample on every GC) with a small
-# allocation area (as suggested in #17387).
+# allocation area (as suggested in #17387). That's what +RTS -h -i0 will do.
+# If you find that a test is flaky, sampling frequency can be adjusted by
+# shrinking the allocation area (+RTS -A64k, for example).
#
# However, please don't just ignore changes in residency. If you see
# a change in one of these figures, please check whether it is real or
# not as follows:
#
-# * Run the test with old and new compilers, adding +RTS -h -i0.01
+# * Run the test with old and new compilers, adding +RTS -h -i0.001
# (you don't need to compile anything for profiling or enable profiling
# libraries to get a heap profile).
# * view the heap profiles, read off the maximum residency. If it has
diff --git a/testsuite/tests/perf/compiler/all.T b/testsuite/tests/perf/compiler/all.T
index b4910c570a..f9cedaff55 100644
--- a/testsuite/tests/perf/compiler/all.T
+++ b/testsuite/tests/perf/compiler/all.T
@@ -9,9 +9,10 @@ setTestOpts(no_lint)
test('T1969',
[# expect_broken(12437),
- # we collect residency for reference only, hence the large acceptance window.
- # We have seen >20% variations in this number.
- collect_compiler_residency(50),
+ collect_compiler_residency(20),
+ extra_run_opts('+RTS -A64k -RTS'),
+ # The default RESIDENCY_OPTS is 256k and we need higher sampling
+ # frequency. Incurs a slow-down by about 2.
collect_compiler_stats('bytes allocated', 1),
only_ways(['normal']),