From 8d7067d2a43a708e68ade68546f4ffc940a780bf Mon Sep 17 00:00:00 2001 From: Andrew Morrow Date: Tue, 9 Jan 2024 13:06:37 -0500 Subject: wip --- CHANGES.txt | 6 +++++- SCons/Script/SConsOptions.py | 2 +- SCons/Taskmaster/Job.py | 11 ++++++----- SCons/Taskmaster/JobTests.py | 7 +++++-- doc/man/scons.xml | 2 +- test/option/option--experimental.py | 8 ++++---- test/option/taskmastertrace.py | 5 +++-- 7 files changed, 25 insertions(+), 16 deletions(-) mode change 100644 => 100755 test/option/option--experimental.py mode change 100644 => 100755 test/option/taskmastertrace.py diff --git a/CHANGES.txt b/CHANGES.txt index dfde4c5..cee9947 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -61,6 +61,11 @@ RELEASE VERSION/DATE TO BE FILLED IN LATER expected bytecodes in ActionTests.py. + From Andrew Morrow: + - The NewParallel scheduler is now the default, the `tm_v2` flag is removed, + and the old scheduler is opt-in under `--experimental=legacysched`. Additionally, + the new scheduler is now used for -j1 builds as well. + RELEASE 4.6.0 - Sun, 19 Nov 2023 17:22:20 -0700 From Max Bachmann: @@ -7950,4 +7955,3 @@ A brief overview of important functionality available in release 0.01: - Linux packages available in RPM and Debian format. - Windows installer available. - diff --git a/SCons/Script/SConsOptions.py b/SCons/Script/SConsOptions.py index b74353e..25675f3 100644 --- a/SCons/Script/SConsOptions.py +++ b/SCons/Script/SConsOptions.py @@ -40,7 +40,7 @@ SUPPRESS_HELP = optparse.SUPPRESS_HELP diskcheck_all = SCons.Node.FS.diskcheck_types() -experimental_features = {'warp_speed', 'transporter', 'ninja', 'tm_v2'} +experimental_features = {'warp_speed', 'transporter', 'ninja', 'legacysched'} def diskcheck_convert(value): diff --git a/SCons/Taskmaster/Job.py b/SCons/Taskmaster/Job.py index 0bd4060..66387d6 100644 --- a/SCons/Taskmaster/Job.py +++ b/SCons/Taskmaster/Job.py @@ -74,7 +74,7 @@ class Jobs: def __init__(self, num, taskmaster) -> None: """ Create 'num' jobs using the given taskmaster. The exact implementation - used varies with the number of jobs requested and the state of the `tm_v2` flag + used varies with the number of jobs requested and the state of the `legacysched` flag to `--experimental`. """ @@ -88,13 +88,14 @@ class Jobs: stack_size = default_stack_size experimental_option = GetOption('experimental') or [] - if 'tm_v2' in experimental_option: - self.job = NewParallel(taskmaster, num, stack_size) - else: + if 'legacysched' in experimental_option: if num > 1: self.job = LegacyParallel(taskmaster, num, stack_size) else: self.job = Serial(taskmaster) + else: + self.job = NewParallel(taskmaster, num, stack_size) + self.num_jobs = num def run(self, postfunc=lambda: None) -> None: @@ -617,7 +618,7 @@ class NewParallel: results_queue, self.results_queue = self.results_queue, results_queue if self.trace: - self.trace_message("Found {len(results_queue)} completed tasks to process") + self.trace_message(f"Found {len(results_queue)} completed tasks to process") for (rtask, rresult) in results_queue: if rresult: rtask.executed() diff --git a/SCons/Taskmaster/JobTests.py b/SCons/Taskmaster/JobTests.py index b114d05..c457e78 100644 --- a/SCons/Taskmaster/JobTests.py +++ b/SCons/Taskmaster/JobTests.py @@ -525,14 +525,17 @@ class SerialTaskTest(_SConsTaskTest): """test serial jobs with actual Taskmaster and Task""" self._test_seq(1) + # Now run test with LegacyParallel + OptionsParser.values.experimental=['legacysched'] + self._test_seq(1) class ParallelTaskTest(_SConsTaskTest): def runTest(self) -> None: """test parallel jobs with actual Taskmaster and Task""" self._test_seq(num_jobs) - # Now run test with NewParallel() instead of LegacyParallel - OptionsParser.values.experimental=['tm_v2'] + # Now run test with LegacyParallel + OptionsParser.values.experimental=['legacysched'] self._test_seq(num_jobs) diff --git a/doc/man/scons.xml b/doc/man/scons.xml index 22f93f5..9432dbe 100644 --- a/doc/man/scons.xml +++ b/doc/man/scons.xml @@ -1212,7 +1212,7 @@ the mechanisms in the specified order. The default setting is none. Current available features are: ninja (New in version 4.2), - tm_v2 (New in version 4.4.1). + legacysched (New in version 4.6.0). No Support offered for any features or tools enabled by this flag. diff --git a/test/option/option--experimental.py b/test/option/option--experimental.py old mode 100644 new mode 100755 index 324de99..2ad189e --- a/test/option/option--experimental.py +++ b/test/option/option--experimental.py @@ -36,13 +36,13 @@ test.file_fixture('fixture/SConstruct__experimental', 'SConstruct') tests = [ ('.', []), ('--experimental=ninja', ['ninja']), - ('--experimental=tm_v2', ['tm_v2']), - ('--experimental=all', ['ninja', 'tm_v2', 'transporter', 'warp_speed']), + ('--experimental=legacysched', ['legacysched']), + ('--experimental=all', ['ninja', 'legacysched', 'transporter', 'warp_speed']), ('--experimental=none', []), ] for args, exper in tests: - read_string = """All Features=ninja,tm_v2,transporter,warp_speed + read_string = """All Features=legacysched,ninja,transporter,warp_speed Experimental=%s """ % (exper) test.run(arguments=args, @@ -51,7 +51,7 @@ Experimental=%s test.run(arguments='--experimental=warp_drive', stderr="""usage: scons [OPTIONS] [VARIABLES] [TARGETS] -SCons Error: option --experimental: invalid choice: 'warp_drive' (choose from 'all','none','ninja','tm_v2','transporter','warp_speed') +SCons Error: option --experimental: invalid choice: 'warp_drive' (choose from 'all','none','legacysched',ninja','transporter','warp_speed') """, status=2) diff --git a/test/option/taskmastertrace.py b/test/option/taskmastertrace.py old mode 100644 new mode 100755 index 99de718..9ff3d37 --- a/test/option/taskmastertrace.py +++ b/test/option/taskmastertrace.py @@ -51,11 +51,12 @@ Copy("Tfile.mid", "Tfile.in") Copy("Tfile.out", "Tfile.mid") """) -test.run(arguments='--taskmastertrace=trace.out .', stdout=expect_stdout) +# Test LegacyParallel Job implementation +test.run(arguments='--experimental=legacysched --taskmastertrace=trace.out .', stdout=expect_stdout) test.must_match_file('trace.out', 'taskmaster_expected_file_1.txt', mode='r') # Test NewParallel Job implementation -test.run(arguments='-j 2 --experimental=tm_v2 --taskmastertrace=new_parallel_trace.out .') +test.run(arguments='-j 2 --taskmastertrace=new_parallel_trace.out .') new_trace = test.read('new_parallel_trace.out', mode='r') thread_id = re.compile(r'\[Thread:\d+\]') -- cgit v0.12