Repository navigation
Description
Run Information
| Name | Value |
|---|---|
| Architecture | arm64 |
| OS | azurelinux 3.0 |
| Queue | CobaltAzureLinux |
| Baseline | 8baacb006f5615ebd705bdf9de98ca5df7bf1ba1 |
| Compare | 9f18a550aaa91ecd032ac024b67e03559df9e766 |
| Diff | Diff |
| Configs | CompilationMode:tiered, RunKind:micro |
Regressions in System.Buffers.Text.Tests.Utf8FormatterTests
| Benchmark | Baseline | Test | Test/Base | Test Quality | Edge Detector | Baseline IR | Compare IR | IR Ratio |
|---|---|---|---|---|---|---|---|---|
| 23.14 ns | 31.71 ns | 1.37 | 0.15 | False | ||||
| 11.05 ns | 12.94 ns | 1.17 | 0.14 | False | ||||
| 25.84 ns | 28.95 ns | 1.12 | 0.19 | 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
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Buffers.Text.Tests.Utf8FormatterTests*'Details
System.Buffers.Text.Tests.Utf8FormatterTests.FormatterDateTimeOffsetNow(value: 12/30/2017 3:45:22 AM -08:00)
ETL Files
Histogram
JIT Disasms
System.Buffers.Text.Tests.Utf8FormatterTests.FormatterUInt32(value: 4294967295)
ETL Files
Histogram
JIT Disasms
System.Buffers.Text.Tests.Utf8FormatterTests.FormatterUInt64(value: 18446744073709551615)
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 | azurelinux 3.0 |
| Queue | CobaltAzureLinux |
| Baseline | 8baacb006f5615ebd705bdf9de98ca5df7bf1ba1 |
| Compare | 9f18a550aaa91ecd032ac024b67e03559df9e766 |
| Diff | Diff |
| Configs | CompilationMode:tiered, RunKind:micro |
Regressions in System.Tests.Perf_Version
| Benchmark | Baseline | Test | Test/Base | Test Quality | Edge Detector | Baseline IR | Compare IR | IR Ratio |
|---|---|---|---|---|---|---|---|---|
| 46.89 ns | 55.50 ns | 1.18 | 0.20 | 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
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Tests.Perf_Version*'Details
System.Tests.Perf_Version.TryFormatL
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 | azurelinux 3.0 |
| Queue | CobaltAzureLinux |
| Baseline | 8baacb006f5615ebd705bdf9de98ca5df7bf1ba1 |
| Compare | 9f18a550aaa91ecd032ac024b67e03559df9e766 |
| Diff | Diff |
| Configs | CompilationMode:tiered, RunKind:micro |
Regressions in System.Tests.Perf_Int32
| Benchmark | Baseline | Test | Test/Base | Test Quality | Edge Detector | Baseline IR | Compare IR | IR Ratio |
|---|---|---|---|---|---|---|---|---|
| 11.07 ns | 12.92 ns | 1.17 | 0.18 | 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
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Tests.Perf_Int32*'Details
System.Tests.Perf_Int32.TryFormat(value: 2147483647)
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 | azurelinux 3.0 |
| Queue | CobaltAzureLinux |
| Baseline | 8baacb006f5615ebd705bdf9de98ca5df7bf1ba1 |
| Compare | 9f18a550aaa91ecd032ac024b67e03559df9e766 |
| Diff | Diff |
| Configs | CompilationMode:tiered, RunKind:micro |
Regressions in System.Tests.Perf_UInt32
| Benchmark | Baseline | Test | Test/Base | Test Quality | Edge Detector | Baseline IR | Compare IR | IR Ratio |
|---|---|---|---|---|---|---|---|---|
| 10.51 ns | 12.53 ns | 1.19 | 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
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Tests.Perf_UInt32*'Details
System.Tests.Perf_UInt32.TryFormat(value: 4294967295)
ETL Files
Histogram
JIT Disasms
Docs
Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository






Activity
LoopedBard3 commentedon Aug 27, 2026
🔍 Automated Triage Analysis
Summary: Verified regression in FormatterUInt64(value: 18446744073709551615) — caused by commit cd25434. 2 tests bisected to related culprit commits. 1 other test(s) found unrelated commits (possible alignment artifacts).
Finding Confidence: 5/5 (analysis accuracy)
Regression Confidence: 5/5 (likelihood of true regression)
Likely Cause: cd254340926a9de135f596224d5d4daff12c2395
🤖 Proposed Next Actions: Known-cause regression — transfer & notify — 0 done, 3 dry-run (rule
R4_known_regression_new— see Full Analysis for the table).📊 Full Analysis (click to expand)
Summary: 6 System.* formatting microbenchmarks (integer/date
TryFormat+Utf8Formatter) stepped up +12% to +37% on Linux/arm64, all coinciding exactly with commit cd254340 — "Remove unsafe code from number parsing and formatting" (#131913), whose authored timestamp is identical to the regression date and which rewrites every formatting path under test. Finding confidence 4/5 (292–296 prior runs, clean step changes); regression confidence 5/5 (exact timing match, direct code path, highest test at z=5.08, and a co-occurring sibling issue #78533).Issue Overview
Test Analysis
Legend: μ=mean, σ=stddev, n=runs, z=z-score, Thresh%=adaptive threshold
Statistical classifier reported 2 firm Regressions (FormatterDateTimeOffsetNow, Perf_Int32.TryFormat) and 4 Borderline. The 4 Borderline cases each show clean, tightly-clustered step changes in their after-values that sit entirely above the recent before-cluster; their inflated adaptive thresholds are artifacts of sporadic low-outlier historical runs (~16 ns for UInt64, ~29 ns for TryFormatL), not genuine variance. Given all 6 move together on the same build and all route through the same rewritten formatting code, they are treated as a single real regression cluster.
Finding Confidence: 4/5 - Strong historical data (292–296 runs), clean step-change patterns, complete commit info, and an exact timestamp match to the culprit. Not raised to 5 because no independent rerun/bisection was performed and after-sample is only 6 runs per test.
Candidate Stack Relevance
Number.Formatting*.cs,DateTimeFormat.cs,TimeSpanFormat.cs,Number.NumberBuffer.cs,IUtfChar.cssrc/coreclr/vm/**(JIT static-base asm helpers, arm64)System.Net.Security/**src/native/managed/cdac/**Confirmed Regressions
System.Buffers.Text.Tests.Utf8FormatterTests.FormatterDateTimeOffsetNow (+37.1%)
Number.Formatting,DateTimeFormat,TimeSpanFormat)unsafe) formatting with span-based implementations acrossNumberBuffer, integer types,DateTime, andTimeSpan.FormatterDateTimeOffsetNowroutes throughDateTimeFormat.cs(186+/226- lines rewritten), the single largest behavioral change in the window. Its authored timestamp (2026-08-25T22:44:15Z) is identical to the regression date, and no other commit in the range touches formatting. The rewrite added span bounds handling that regresses on arm64 despite the author's x64-oriented harness showing neutral/faster results.System.Tests.Perf_Int32.TryFormat(value: 2147483647) (+16.7%)
TryFormatcode path, corroborated by UInt32 variantNumber.Formatting.cs/Number.Formatting.Common.cs)Int32.TryFormatcalls the rewritten integer-formatting span path. The simultaneous, near-identical regression of bothInt32.TryFormatandUInt32.TryFormatpoints to the shared rewritten code path rather than test noise.Corroborating step changes (same cause)
The remaining four move as one cluster with the two firm regressions and share the identical culprit (cd254340); classified Borderline only because sporadic historical low-outliers inflated their adaptive thresholds:
Utf8Formatter.FormatterUInt32 (+17.1%, z=2.20) — integer formatting path
Utf8Formatter.FormatterUInt64 (+12.0%, z=1.55) — integer formatting path
Perf_Version.TryFormatL (+18.4%, z=2.10) — integer formatting via
Version.TryFormatPerf_UInt32.TryFormat (+19.2%, z=2.25) — integer formatting path
Regression Confidence (cluster): 4/5 - Individually below adaptive thresholds but consistent step changes on the same build through the same rewritten code; sibling issue #78533 co-occurs, lowering the odds of pure noise.
Open Questions
cd254340vs its parent0ea1e369via RunWithBuildAtHash on the arm64 Cobalt queue would raise both confidences to 5/5, especially for the borderline UInt64/UInt32 cases.Recommended Actions
cd254340926avs parent0ea1e3690e47(arm64, AzureLinux Cobalt) to confirm the step and quantify per-test deltas.Number.Formatting.cs,Number.Formatting.Common.cs, andDateTimeFormat.cs(the pre-existing pointer paths may have avoided bounds checks that the span rewrite reintroduced on arm64).Bisection Results
Total bisection time: 120m 51s
Tests measured: 5/6
Culprit found: 4/6
Bisection found commits that are unrelated to the regressed tests. This strongly suggests the performance changes are caused by code alignment, binary layout, or other non-functional factors rather than actual regressions. Consider marking as noise.
System.Buffers.Text.Tests.Utf8FormatterTests.FormatterDateTimeOffsetNow(value: 12/30/2017 3:45:22 AM -08:00)
System.Buffers.Text.Tests.Utf8FormatterTests.FormatterUInt32(value: 4294967295)
Bisection details
cd254340926aPer-commit measurements (oldest → newest) (ns)
8baacb006f567c33e9b3fdb2bebb6503c2005ec6efc171b10ea1e3690e47cd254340926a9f18a550aaa9Helix jobs
135b1f4f-3b5d-4421-b94f-413867cab4a6868d996d-4302-4f81-8fa7-cc23ebf33ef098917c27-a4c8-4a70-91cb-e3995b657df7System.Buffers.Text.Tests.Utf8FormatterTests.FormatterUInt64(value: 18446744073709551615)
Bisection details
cd254340926aPer-commit measurements (oldest → newest) (ns)
8baacb006f567c33e9b3fdb2bebb6503c2005ec6efc171b10ea1e3690e47cd254340926a9f18a550aaa9Helix jobs
213c6025-ab59-4103-a873-fb7ca0559cefc04296be-d653-4e91-a14a-1a92abb4ad028bdb1e2f-cb45-42ef-a231-e45ca98d00d3System.Tests.Perf_Version.TryFormatL
Bisection details
9f18a550aaa9Per-commit measurements (oldest → newest) (ns)
8baacb006f567c33e9b3fdb2bebb6503c2005ec6efc171b1cd254340926a9f18a550aaa9Helix jobs
f1dfe87b-0f1c-4c52-a4c8-ed934f0472e739efa690-2409-4ea1-98bd-3ce3d0afea39System.Tests.Perf_Int32.TryFormat(value: 2147483647)
Bisection details
Per-commit measurements (oldest → newest) (ns)
8baacb006f567c33e9b3fdb2bebb6503c2009f18a550aaa9Helix jobs
5da731ed-5f17-4724-88ce-688e41bff2d5System.Tests.Perf_UInt32.TryFormat(value: 4294967295)
Bisection details
cd254340926aPer-commit measurements (oldest → newest) (ns)
8baacb006f567c33e9b3fdb2bebb6503c2005ec6efc171b10ea1e3690e47cd254340926a9f18a550aaa9Helix jobs
ea5282f0-bf1d-4f48-9ee8-938a388581d7387d5060-7a03-426b-967e-63a346d12eb0741c2e3f-4c29-45f0-b6b6-4774ed7deffc🤖 Proposed Next Actions
Rule:
R4_known_regression_new— Known-cause regression — transfer & notify.Verified regression attributed to commit cd25434 (finding 5/5, regression 5/5, bisection RELATED). No prior linked autofile issue found.
cd254340926a🦆 Pre-bisection Re-analysis (advisory)
✅ Agrees with the pre-bisection plan — advisory only, not applied
Rationale: All six findings are non-noise with strong change confidence (4-5/5) and converge on the same likely commit, so the actionable classification and the candidate set are consistent and well-supported.
This critique is advisory in the current configuration and did not change which tests were bisected.
🦆 Re-analysis (advisory)
Flags:
overconfident-change,weak-bisection-evidenceRationale: The aggregate culprit cd25434 is fairly supported since three successful bisections (FormatterUInt32, FormatterUInt64, Perf_UInt32.TryFormat, two marked RELATED) converge on it, so I do not dispute it, but a top-level change confidence of 5/5 is too high because two of the findings carrying 5/5 change confidence (FormatterDateTimeOffsetNow and Perf_Int32.TryFormat) had bisections that failed or were inconclusive and no z-score/variance evidence is provided.
Suggested confidence: Change Confidence → 4/5 (advisory — not applied)
This critique is advisory in the current configuration and did not change the confidences, culprit, or proposed actions above.
Generated by PerfTriageAgent on 2026-08-27 11:17 UTC
DrewScoggins commentedon Aug 27, 2026
Bisected to #131913
Related regressions:
dotnet-policy-service commentedon Aug 27, 2026
Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch
See info in area-owners.md if you want to be subscribed.
tannergooding commentedon Aug 27, 2026
Most of these, except
TryFormatLforSystem.Versionare within the general noise and should likely rather be look again instead (and same with the "related regressions")I'm going to take a look at the Version one locally, but closing this as everything else (even if it is noise) is within 1ns and unlikely to be a hot path bottleneck. It's an acceptable tradeoff for making the code safer and more robust.
LoopedBard3 commentedon Sep 1, 2026
Related Improvements — issues attributed to the same commit:
Augmented by PerfTriageAgent.
LoopedBard3 commentedon Sep 1, 2026
Related Regressions — issues attributed to the same commit:
Augmented by PerfTriageAgent.