Serialize benchmark jobs to fix amdci3-1 rapid-dispatch corruption#1568
Closed
ChrisRackauckas-Claude wants to merge 1 commit into
Closed
Serialize benchmark jobs to fix amdci3-1 rapid-dispatch corruption#1568ChrisRackauckas-Claude wants to merge 1 commit into
ChrisRackauckas-Claude wants to merge 1 commit into
Conversation
amdci3-1 corrupts its workspace under rapid dispatch — when 2+ jobs arrive within seconds, all but one die with errors like: ##[error]Missing file at path: ..._runner_file_commands/set_output_... ##[error]Can't find action.yml under .../_actions/actions/checkout/v6 ##[error]The operation was canceled. Single jobs on the runner run cleanly; the bug is purely concurrency-on-the-same-runner. Reproduced 3 times now: 1. Original 25374549824 v7 run: 3 jobs cancelled-mid-checkout in seconds 2. 2026-05-16 07:58 UTC burst: 6 jobs from PRs SciML#1559/SciML#1560/SciML#1561 dispatched to amdci3-1, all but one corrupted (StiffODE — which had been cleanly running for 16h — also got cancelled in the cascade) 3. 2026-05-16 08:31 UTC burst: all 5 single-folder PRs SciML#1563-SciML#1567 dispatched simultaneously, all 5 corrupted within seconds Splitting into per-folder PRs (per Chris's direction) doesn't help when multiple PRs are opened together — cross-PR dispatch hits the same race. Fix: job-level concurrency with a constant group + cancel-in-progress:false makes every matrix entry across every Benchmarks workflow run queue behind any other in-flight matrix entry. detect-changes / manual-matrix / publish jobs are unaffected (they're separate GHA jobs). Adds max-parallel: 1 to the matrix as defense-in-depth — within a single run, matrix entries already serialize via the concurrency group, but max-parallel makes it explicit. Throughput cost: even with two healthy runners (amdci1-1 + amdci3-1), only one benchmark job runs at a time. Acceptable given the alternative is a ~60% job-loss rate. Can be relaxed once the runner bug is fixed — e.g. parameterize the concurrency group by matrix.runner to allow one job per runner. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
bd76ef6 to
3048994
Compare
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.
Summary
Add job-level concurrency +
max-parallel: 1to the matrix so only one benchmark job runs at a time across all Benchmarks workflow runs. This works around a runner-pool bug where amdci3-1 corrupts its workspace under rapid dispatch.Symptom
When 2+ benchmark jobs are dispatched to amdci3-1 within seconds, all but the last one die with infra errors. Reproduced three times now:
Errors are always one of:
##[error]The operation was canceled.(during actions/checkout)##[error]Missing file at path: ..._runner_file_commands/set_output_...##[error]Can't find action.yml under .../_actions/actions/checkout/v6. Did you forget to run actions/checkout before running your local action?amdci1-1 doesn't show this pattern. Single jobs on amdci3-1 also run cleanly (StiffODE, StiffSDE, AutomaticDifferentiation, NBodySimulator all completed normally when they had the runner to themselves).
Fix
Every matrix entry across every Benchmarks workflow run shares the constant group
benchmark-runner-pool, so they queue one at a time. Other jobs (detect-changes, manual-matrix, publish) are unaffected.Tradeoff
Even with both runners healthy and idle, only one benchmark job runs at a time. Halves throughput in the best case. Acceptable given the alternative is ~60% job-loss rate from rapid-dispatch corruption.
Can be relaxed once the underlying runner bug is fixed (e.g. parameterize the group by
matrix.runnerto allow one job per runner instead of one job globally).Test plan
Note for review
Please ignore until reviewed by @ChrisRackauckas. This is an architectural choice, not a no-op fix.