Repository navigation
[Perf] Linux/arm64: 2 Regressions on 5/7/2026 11:58:29 AM +00:00 #128208
Copy link
Copy link
Open
Labels
arch-arm64area-CodeGen-coreclrCLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMICLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMIos-linuxLinux OS (any supported distro)Linux OS (any supported distro)runtime-coreclrspecific to the CoreCLR runtimespecific to the CoreCLR runtimetenet-performancePerformance related issuePerformance related issuetenet-performance-benchmarksIssue from performance benchmarkIssue from performance benchmark
Milestone
Description
Run Information
| Name | Value |
|---|---|
| Architecture | arm64 |
| OS | ubuntu 22.04 |
| Queue | AmpereUbuntu |
| Baseline | 4da638db14b248048f4efc07c8166c1f521b208e |
| Compare | c3caf4d3163c429efbdefe7756a71702e9e6c982 |
| Diff | Diff |
| Configs | CompilationMode:tiered, RunKind:micro |
Regressions in System.Numerics.Tensors.Tests.Perf_BinaryIntegerTensorPrimitives<Byte>
| Benchmark | Baseline | Test | Test/Base | Test Quality | Edge Detector | Baseline IR | Compare IR | IR Ratio |
|---|---|---|---|---|---|---|---|---|
| 10.00 ns | 11.31 ns | 1.13 | 0.22 | False |
Repro
General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md
git clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Numerics.Tensors.Tests.Perf_BinaryIntegerTensorPrimitives<Byte>*'Details
System.Numerics.Tensors.Tests.Perf_BinaryIntegerTensorPrimitives<Byte>.PopCount(BufferLength: 128)
ETL Files
Histogram
JIT Disasms
Docs
Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository
Run Information
| Name | Value |
|---|---|
| Architecture | arm64 |
| OS | ubuntu 22.04 |
| Queue | AmpereUbuntu |
| Baseline | 4da638db14b248048f4efc07c8166c1f521b208e |
| Compare | c3caf4d3163c429efbdefe7756a71702e9e6c982 |
| Diff | Diff |
| Configs | CompilationMode:tiered, RunKind:micro |
Regressions in BenchmarksGame.Fasta_2
| Benchmark | Baseline | Test | Test/Base | Test Quality | Edge Detector | Baseline IR | Compare IR | IR Ratio |
|---|---|---|---|---|---|---|---|---|
| 322.65 μs | 403.68 μs | 1.25 | 0.07 | False |
Repro
General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md
git clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'BenchmarksGame.Fasta_2*'Details
BenchmarksGame.Fasta_2.RunBench
ETL Files
Histogram
JIT Disasms
Docs
Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
arch-arm64area-CodeGen-coreclrCLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMICLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMIos-linuxLinux OS (any supported distro)Linux OS (any supported distro)runtime-coreclrspecific to the CoreCLR runtimespecific to the CoreCLR runtimetenet-performancePerformance related issuePerformance related issuetenet-performance-benchmarksIssue from performance benchmarkIssue from performance benchmark


Activity
LoopedBard3 commentedon May 14, 2026
Error:
TransientError: Failed to start MCP serverPlease escalate to the performance infrastructure team if this issue needs triage.
LoopedBard3 commentedon May 14, 2026
🔍 Automated Triage Analysis
Summary: Verified regression in RunBench — caused by commit 9f657f0 ("Remove unsafe code from System.Linq.MaxMin (#127845)").
Finding Confidence: 5/5 (analysis accuracy)
Regression Confidence: 5/5 (likelihood of true regression)
Likely Cause: 9f657f018a1d31bf7c76f021693492c9d3b967a9
📊 Full Analysis (click to expand)
Issue Overview
Test Analysis
7.2→8.9→~10.0); recent values stable10.0→11.3Legend: μ=mean, σ=stddev, n=historical runs, z=z-score, Thresh%=adaptive threshold, CV=coefficient of variation
Finding Confidence: 4/5 - Excellent historical data (294–295 runs per test), both tests well-characterized. Downgraded from 5 because no verification via RunWithBuildAtHash was performed.
Confirmed Regressions
BenchmarksGame.Fasta_2.RunBench (+25.11%)
codegenarmarch.cpp(+41 lines),emitarm64.cpp(335 changes), andlclvars.cpp(+109 lines). It reserves x19 for addressing unknown-size SIMD/mask locals and introduces a bump allocator forTYP_SIMDandTYP_MASKlocals. These ARM-specific codegen changes could affect register allocation and code generation for all methods on ARM64, even those not directly using SVE. The regression is ARM64-only, which aligns with this commit's ARM-specific scope. Committed 2026-05-07T13:15:06, same day as regression.Borderline Tests
Perf_BinaryIntegerTensorPrimitives<Byte>.PopCount(BufferLength: 128) (+13.09%)
7.2→8.9→~10.0 ns), which inflates σ and the adaptive threshold. Recent pre-regression values were stable around 10.0 ns, and post-regression values are ~11.3–11.5 ns, suggesting a possible step change masked by historical variance. Monitoring recommended for 2–3 additional runs.Open Questions
7.2→8.9→~10.0 ns), making it hard to distinguish a genuine new regression from ongoing step-change behavior. Need 2–3 more runs to confirm if ~11.3 ns is a new stable level.Recommended Actions
Bisection Results
Total bisection time: 10091s
Success rate: 1/2 tests
System.Numerics.Tensors.Tests.Perf_BinaryIntegerTensorPrimitives.PopCount(BufferLength: 128)
Helix jobs
c4719ff0-64f7-41a1-ba4d-3f73c89ffdb9ec84b904-8e1c-45d5-9231-606557420c2aPer-commit measurements
cdbf0c2ba8a858c6d30b9b8741fad311Bisection details
…[earlier output omitted]
BenchmarksGame.Fasta_2.RunBench
Helix jobs
36fc0b5c-0a37-4208-8f76-08fcef6af992e76719d8-1abe-4e2d-94a3-f96edc50426a42be761c-99bf-44dd-84e9-2c135e649d08Per-commit measurements
cdbf0c2ba8a85566dcc3aef99f657f018a1ddd14dfdd9ed341fad311c8c34586cd5c0b7c58c6d30b9b87Bisection details
…[earlier output omitted]
9d3b967a9","abbrevSh...
Bisection complete. The culprit is
9f657f018a1d31bf7c76f021693492c9d3b967a9— "Remove unsafe code from System.Linq.MaxMin (#127845)" by EgorBo.This commit modifies JIT inliner budget heuristics (
SIMD_BUDGET_BOOST_MULTIPLIER = 5) when HW intrinsicIsSupportedchecks are observed, plus changes toSystem.Linq.MaxMin. The Fasta_2 benchmark uses ARM SIMD intrinsics, so the JIT inlining changes could alter code generation and cause the regression on ARM64.Generated by PerfTriageAgent on 2026-05-14 14:56 UTC
DrewScoggins commentedon May 14, 2026
Appears to be related to #127845
dotnet-policy-service commentedon May 14, 2026
Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch
See info in area-owners.md if you want to be subscribed.
EgorBo commentedon Aug 14, 2026
#127845 delivered up to 7x improvements for Linq.Max. I think some worst cases can be handled in 12.0