summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKuba Mracek <mracek@apple.com>2017-01-17 17:18:18 +0000
committerKuba Mracek <mracek@apple.com>2017-01-17 17:18:18 +0000
commita802a5096330d121d0394d5a3a0f924feec51853 (patch)
tree38ecb6ab30747a2aa0d9ae04c44a0780d08e20a6
parent53013e9e6fe65e87de2c7eb42570871e4e34ab01 (diff)
downloadbcm5719-llvm-a802a5096330d121d0394d5a3a0f924feec51853.tar.gz
bcm5719-llvm-a802a5096330d121d0394d5a3a0f924feec51853.zip
[lit] Limit parallelism of sanitizer tests on Darwin [compiler-rt part]
Running lit tests and unit tests of ASan and TSan on macOS has very bad performance when running with a high number of threads. This is caused by xnu (the macOS kernel), which currently doesn't handle mapping and unmapping of sanitizer shadow regions (reserved VM which are several terabytes large) very well. The situation is so bad that increasing the number of threads actually makes the total testing time larger. The macOS buildbots are affected by this. Note that we can't easily limit the number of sanitizer testing threads without affecting the rest of the tests. This patch adds a special "group" into lit, and limits the number of concurrently running tests in this group. This helps solve the contention problem, while still allowing other tests to run in full, that means running lit with -j8 will still with 8 threads, and parallelism is only limited in sanitizer tests. Differential Revision: https://reviews.llvm.org/D28420 llvm-svn: 292232
-rw-r--r--compiler-rt/test/asan/Unit/lit.site.cfg.in2
-rw-r--r--compiler-rt/test/asan/lit.cfg4
-rw-r--r--compiler-rt/test/tsan/Unit/lit.site.cfg.in2
-rw-r--r--compiler-rt/test/tsan/lit.cfg4
-rw-r--r--compiler-rt/unittests/lit.common.unit.cfg7
5 files changed, 19 insertions, 0 deletions
diff --git a/compiler-rt/test/asan/Unit/lit.site.cfg.in b/compiler-rt/test/asan/Unit/lit.site.cfg.in
index 55631a6d927..5dac134ee25 100644
--- a/compiler-rt/test/asan/Unit/lit.site.cfg.in
+++ b/compiler-rt/test/asan/Unit/lit.site.cfg.in
@@ -27,3 +27,5 @@ config.test_source_root = config.test_exec_root
# Set LD_LIBRARY_PATH to pick dynamic runtime up properly.
push_ld_library_path(config, config.compiler_rt_libdir)
+
+config.parallelism_group = config.darwin_sanitizer_parallelism_group_func
diff --git a/compiler-rt/test/asan/lit.cfg b/compiler-rt/test/asan/lit.cfg
index 7703f5a31b0..78936d3c894 100644
--- a/compiler-rt/test/asan/lit.cfg
+++ b/compiler-rt/test/asan/lit.cfg
@@ -241,3 +241,7 @@ else:
# Only run the tests on supported OSs.
if config.host_os not in ['Linux', 'Darwin', 'FreeBSD', 'Windows']:
config.unsupported = True
+
+if config.host_os == 'Darwin':
+ if config.target_arch in ["x86_64", "x86_64h"]:
+ config.parallelism_group = "darwin-64bit-sanitizer"
diff --git a/compiler-rt/test/tsan/Unit/lit.site.cfg.in b/compiler-rt/test/tsan/Unit/lit.site.cfg.in
index 23894a83985..5465810a1cc 100644
--- a/compiler-rt/test/tsan/Unit/lit.site.cfg.in
+++ b/compiler-rt/test/tsan/Unit/lit.site.cfg.in
@@ -11,3 +11,5 @@ config.name = 'ThreadSanitizer-Unit'
# FIXME: De-hardcode this path.
config.test_exec_root = "@COMPILER_RT_BINARY_DIR@/lib/tsan/tests"
config.test_source_root = config.test_exec_root
+
+config.parallelism_group = config.darwin_sanitizer_parallelism_group_func
diff --git a/compiler-rt/test/tsan/lit.cfg b/compiler-rt/test/tsan/lit.cfg
index 5d82cc9d492..9fba28388d6 100644
--- a/compiler-rt/test/tsan/lit.cfg
+++ b/compiler-rt/test/tsan/lit.cfg
@@ -83,3 +83,7 @@ if config.host_os not in ['FreeBSD', 'Linux', 'Darwin']:
# because the test hangs.
if config.target_arch != 'aarch64':
config.available_features.add('stable-runtime')
+
+if config.host_os == 'Darwin':
+ if config.target_arch in ["x86_64", "x86_64h"]:
+ config.parallelism_group = "darwin-64bit-sanitizer"
diff --git a/compiler-rt/unittests/lit.common.unit.cfg b/compiler-rt/unittests/lit.common.unit.cfg
index 2bd8f376f00..cd66f559925 100644
--- a/compiler-rt/unittests/lit.common.unit.cfg
+++ b/compiler-rt/unittests/lit.common.unit.cfg
@@ -28,3 +28,10 @@ if 'TMP' in os.environ:
config.environment['TMP'] = os.environ['TMP']
if 'TEMP' in os.environ:
config.environment['TEMP'] = os.environ['TEMP']
+
+def darwin_sanitizer_parallelism_group_func(test):
+ if test.config.host_os == "Darwin":
+ if test.file_path.find("x86_64") != -1:
+ return "darwin-64bit-sanitizer"
+ return ""
+config.darwin_sanitizer_parallelism_group_func = darwin_sanitizer_parallelism_group_func
OpenPOWER on IntegriCloud