[lit] Add "early_tests" config option

With enough cores, the slowest tests can significantly change the total testing time if they happen to run late. With this change, a test suite can improve performance (for high-end systems) by listing just a few of the slowest tests up front.

Reviewed By: jdenny, jhenderson

Differential Revision: https://reviews.llvm.org/D96594
This commit is contained in:
David Zarzycki 2021-02-16 12:00:00 -05:00
parent 08131c7439
commit 161e826c58
8 changed files with 30 additions and 0 deletions

View File

@ -397,6 +397,13 @@ executed, two important global variables are predefined:
**root** The root configuration. This is the top-most :program:`lit` configuration in
the project.
**is_early** Whether the test suite as a whole should be given a head start
before other test suites run.
**early_tests** An explicit set of '/' separated test paths that should be
given a head start before other tests run. For example, the top five or so
slowest tests. See also: `--time-tests`
**pipefail** Normally a test using a shell pipe fails if any of the commands
on the pipe fail. If this is not desired, setting this variable to false
makes the test fail only if the last command in the pipe fails.

View File

@ -404,4 +404,6 @@ class Test:
This can be used for test suites with long running tests to maximize
parallelism or where it is desirable to surface their failures early.
"""
if '/'.join(self.path_in_suite) in self.suite.config.early_tests:
return True
return self.suite.config.is_early

View File

@ -127,6 +127,8 @@ class TestingConfig(object):
self.limit_to_features = set(limit_to_features)
# Whether the suite should be tested early in a given run.
self.is_early = bool(is_early)
# List of tests to run early.
self.early_tests = {}
self.parallelism_group = parallelism_group
self._recursiveExpansionLimit = None

View File

@ -0,0 +1 @@
# RUN: true

View File

@ -0,0 +1 @@
# RUN: true

View File

@ -0,0 +1,7 @@
import lit.formats
config.name = 'early-tests'
config.suffixes = ['.txt']
config.test_format = lit.formats.ShTest()
config.test_source_root = None
config.test_exec_root = None
config.early_tests = { "subdir/ccc.txt" }

View File

@ -0,0 +1 @@
# RUN: true

View File

@ -0,0 +1,9 @@
## Check that we can run tests early.
# RUN: %{lit} -j1 %{inputs}/early-tests | FileCheck %s
# CHECK: -- Testing: 3 tests, 1 workers --
# CHECK-NEXT: PASS: early-tests :: subdir/ccc.txt
# CHECK-NEXT: PASS: early-tests :: aaa.txt
# CHECK-NEXT: PASS: early-tests :: bbb.txt
# CHECK: Passed: 3