Repository navigation
Overlap the WSL and container setups with the build again, with five-minute step timeouts - #5968
Merged
Merged
Conversation
johnsimons
force-pushed
the
john/ci_overlap_experiment
branch
2 times, most recently
from
October 8, 2026 23:53
7d23b19 to
b400817
Compare
…ehind the wait Waiting for the build before starting the WSL VM and container setups (#5873) was meant to stop runner hangs from memory contention, but it didn't help and cost the critical path about two minutes. Let those steps overlap the build again and add five-minute timeouts to the build and WSL setup, so a hang now fails fast instead of running the full thirty-minute job timeout. The wait is kept, but moved so it only gates the Azure steps that provision real cloud resources.
johnsimons
force-pushed
the
john/ci_overlap_experiment
branch
from
October 9, 2026 01:21
b400817 to
9d7e606
Compare
johnsimons
marked this pull request as ready for review
October 9, 2026 02:58
danielmarbach
approved these changes
Oct 9, 2026
warwickschroeder
approved these changes
Oct 13, 2026
rbev
approved these changes
Oct 13, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
#5873 moved "Wait for build" ahead of the WSL and container setups because two Windows jobs had hung with "The hosted runner lost communication with the server" while the build and the 8 GB WSL2 VM shared the runner. The job history since then says the serialisation did not buy what it was meant to buy:
The hang lives in the WSL step and the runner, and the serial order costs the critical path about two minutes on every run.
What changes
timeout-minutes: 5. A healthy build takes up to about three minutes on the heaviest category and WSL under a minute, so a stall now fails the job in five minutes instead of occupying a runner for thirty.Measured on this branch
Three CI runs with a sampler step that recorded free memory and CPU every five seconds during the overlapped stretch. The final file does not include the sampler.
Critical path, Windows-SqlServer:
The build and the SQL Server setup each run slower when they share the box, which is why the saving is 110s and not the 160s the step lengths add up to.
Other Windows container jobs: PostgreSql 365s to 276s, RabbitMQ 293s to 253s, IBMMQ 205s to 153s.
Memory was not the constraint. Minimum free memory during the overlap was 3.9 GB on Windows-SqlServer, 8 to 10 GB on the other three Windows container jobs, and above 12 GB on Linux. CPU sat at 100% on every Windows container job for the duration, so cores are what the build and the VM compete for.
One of the eight overlapped Windows container jobs hung: run 37859193494, Windows-SqlServer, with "Build" and "Setup WSL" both in progress. That commit predates the step timeouts, so it ran to the 30 minute cap.
What to expect
Invoke-Wslcalls have no timeout.background: truestep. Iftimeout-minutesdoes not apply to background steps, a hung build still runs to the job cap. The "Setup WSL" timeout is on a plain step.Verification
The three experiment runs above, on the branch with the sampler steps; the workflow file parses locally. The CI run on this pull request is the first with the exact final file.