[PERF] Use standalone Helix monitor for slow performance jobs - #133726
Open
LoopedBard3 wants to merge 3 commits into
Open
[PERF] Use standalone Helix monitor for slow performance jobs#133726LoopedBard3 wants to merge 3 commits into
LoopedBard3 wants to merge 3 commits into
Conversation
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
|
Azure Pipelines: Successfully started running 6 pipeline(s). 10 pipeline(s) were filtered out due to trigger conditions. There may be pipelines that require an authorized user to comment /azp run to run. |
Contributor
|
Tagging subscribers to this area: @dotnet/runtime-infrastructure |
Contributor
There was a problem hiding this comment.
🔵 Needs a closer look
Wire monitor parameters through the performance templates before approval.
Pull request overview
Adds standalone Helix monitoring to the perf-slow pipeline for asynchronous submission and completion tracking.
Changes:
- Configures scoped credentials and a 360-minute monitor cap.
- Preserves existing job selection, triggers, and schedules.
- Allows legitimate zero-submission runs.
File summaries
| File | Review |
|---|---|
eng/pipelines/performance/perf-slow.yml |
Adds monitor configuration, but monitor parameters are not wired through the performance templates, so jobs remain synchronous and completion gating is ineffective. |
Review details
Suppressed comments (1)
eng/pipelines/performance/perf-slow.yml:64
- The monitor job is not connected to the submitter configuration. At the pinned
dotnet/performancerevision,runtime-slow-perf-jobs.ymlforwardsjobParametersintoruntime-perf-job, butrun-performance-job.ymlinvokessend-to-helix-step.ymlwith onlyosGroupandprojectFile; that step'sUseHelixMonitordefaults tofalseandWaitForWorkItemCompletiondefaults totrue. Therefore these slow jobs remain synchronous, so agents stay occupied and the standalone monitor cannot provide the stated asynchronous submission/completion gating. Wire a monitor parameter through the performance templates (includingUseHelixMonitorand its wait behavior) and pass it from this pipeline before merging.
- ${{ if eq(variables['enableHelixJobMonitor'], true) }}:
- template: /eng/common/core-templates/job/helix-job-monitor.yml
parameters:
${{ if and(eq(variables['System.TeamProject'], 'internal'), ne(variables['Build.Reason'], 'PullRequest')) }}:
helixAccessToken: $(HelixApiAccessToken)
- Files reviewed: 1/1 changed files
- Comments generated: 0
- Review effort level: Lite
lewing
approved these changes
Sep 11, 2026
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
Private PullRequest workloads may be undiscoverable by the monitor, allowing failures to leave the pipeline green.
Get a fresh assessment by requesting another Copilot review.
Review details
- Files reviewed: 1/1 changed files
- Comments generated: 1
- Review effort level: Lite
Comment on lines
+62
to
+65
| helixAccessToken: ${{ iif(and(eq(variables['System.TeamProject'], 'internal'), ne(variables['Build.Reason'], 'PullRequest')), '$(HelixApiAccessToken)', '') }} | ||
| # Cap monitoring at six hours even though slow jobs can run longer. | ||
| timeoutInMinutes: 360 | ||
| allowNoHelixJobs: true |
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
Adopt the standalone Helix Job Monitor for
perf-slow, following #132807 and the stage-scoped credential fix in #133633.DotNet-HelixApi-Accessat stage scope for internal non-PR runs, since the sibling monitor does not inherit submitter job variable groups. Always includehelixAccessToken, using a compile-timeiifexpression to select$(HelixApiAccessToken)only on those runs and an empty string for anonymous access elsewhere.360minutes; the tool's maximum wait is355minutes). Existing submitter and workitem timeouts remain unchanged, so this is not a whole-pipeline wall-clock deadline.Only
eng/pipelines/performance/perf-slow.ymlchanges.Validation
Internal pipeline 1012, sanity run 3072457, ran with
onlySanityCheck=true,runScheduledJobs=true, andrunPrivateJobs=true.12fb88f1065a13388d7488fd28e65e18006a08f2.c735123e8b45db1c8d0e30207bfe24a5fca2621c.This demonstrates private job discovery, asynchronous agent release, completion gating, and failure propagation. It is not a fully passing benchmark run.
Failure caveats
Four Linux workitems failed with
NETSDK1045: generated benchmark projects target .NET 12.0 while the SDK reports support through .NET 11.0. The same error was verified in main's slow-performance run 3072225, including Linux Helix job59558d46-2044-4bbe-9b59-cc369574171a,arm64.micro.net11.0.Partition0, console line 848.The Windows workitem failed differently:
WinError 225blockeddotnet --infofor the downloaded SDK as a virus or potentially unwanted software. This is unclassified, not a confirmed false positive or confirmed pre-existing failure. Evidence: Helix job071489c5-3f06-4671-b957-0a25abcd5d65,arm64.micro.net11.0.Partition0, console line 436. Build Analysis supplied no known-issue match.Final follow-up coverage
Subsequent revisions decouple private credentials from monitor eligibility. Commit
1b1a9defdfb3d4a1e1e0b47ba5edaeeb0794ce0enow includes the flag, job, and all three parameters unconditionally. These changes were not included in the live run at12fb88f1065a13388d7488fd28e65e18006a08f2.The final version passed local unique-key YAML parsing and 192 project/reason/private/scheduled/sanity combinations, including 68 public or no-selection cases with a monitor but no benchmark submissions. Checks cover unconditional monitor inclusion, guarded credential import, an explicit empty anonymous token, the 360/355-minute limits, preserved workload selection/triggers/schedules, the monitor-template contract, and
git diff --check.An Azure preview of the modified YAML was attempted but denied because
EditBuildpermission is required. No permissions were changed or bypassed. The local expression checks are not an Azure template compiler or a live public/anonymous-access test, and no new manual CI run or local product build was performed for this pipeline-only revision.Note
This change and PR description were prepared with GitHub Copilot.