Skip to content

[Perf] Linux/arm64: 49 Improvements on 8/5/2026 1:23:13 AM +00:00 #77882

Open

Description

@performanceautofiler

Run Information

Name Value
Architecture arm64
OS ubuntu 22.04
Queue AmpereUbuntu
Baseline 2dd5330804f9d4f49599d82c90a67892d4dd8af0
Compare c8f97975ab0d8ff84aebf176829e17f7c7052f03
Diff Diff
Configs CompilationMode:tiered, RunKind:micro

Improvements in System.Reflection.Metadata.Perf_TypeName

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
1158.21 ns 899.78 ns 0.78 0.10 False
7.45 μs 5.82 μs 0.78 0.10 False
1073.18 ns 842.59 ns 0.79 0.09 False
1126.35 ns 886.51 ns 0.79 0.11 False
7.53 μs 6.05 μs 0.80 0.07 False
1.35 μs 1.09 μs 0.81 0.08 False
1166.03 ns 944.60 ns 0.81 0.11 False
3.41 μs 2.78 μs 0.82 0.12 False
1153.44 ns 941.24 ns 0.82 0.07 False
4.05 μs 3.31 μs 0.82 0.09 False
1.32 μs 1.08 μs 0.82 0.08 False
1.34 μs 1.10 μs 0.82 0.08 False
1123.56 ns 926.50 ns 0.82 0.12 False
1.31 μs 1.08 μs 0.83 0.07 False
1.24 μs 1.03 μs 0.83 0.15 False
8.90 μs 7.38 μs 0.83 0.06 False
2.58 μs 2.15 μs 0.83 0.15 False
3.05 μs 2.55 μs 0.84 0.06 False
2.93 μs 2.46 μs 0.84 0.05 False
6.26 μs 5.26 μs 0.84 0.14 False
1.27 μs 1.07 μs 0.85 0.09 False
2.94 μs 2.49 μs 0.85 0.09 False
1.33 μs 1.13 μs 0.85 0.09 False
4.07 μs 3.49 μs 0.86 0.07 False
1019.28 ns 872.65 ns 0.86 0.12 False
3.34 μs 2.86 μs 0.86 0.14 False
2.47 μs 2.13 μs 0.86 0.12 False
3.40 μs 2.94 μs 0.86 0.12 False
2.41 μs 2.09 μs 0.86 0.11 False
4.07 μs 3.55 μs 0.87 0.11 False

graph
graph
graph
graph
graph
graph
graph
graph
graph
graph
graph
graph
graph
graph
graph
graph
graph
graph
graph
graph
graph
graph
graph
graph
graph
graph
graph
graph
graph
graph
Test Report

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.Reflection.Metadata.Perf_TypeName*'
Details

System.Reflection.Metadata.Perf_TypeName.Parse_AssemblyQualifiedName(input: typeof(System.Int32[]))

ETL Files

Histogram

JIT Disasms

System.Reflection.Metadata.Perf_TypeName.Parse_AssemblyQualifiedName(input: typeof(System.Collections.Generic.Dictionary`2[]) (COMPLEX))

ETL Files

Histogram

JIT Disasms

System.Reflection.Metadata.Perf_TypeName.Parse_AssemblyQualifiedName(input: typeof(int))

ETL Files

Histogram

JIT Disasms

System.Reflection.Metadata.Perf_TypeName.Parse_AssemblyQualifiedName(input: typeof(System.Int32&))

ETL Files

Histogram

JIT Disasms

System.Reflection.Metadata.Perf_TypeName.ParseAndGetFullName(input: typeof(System.Collections.Generic.Dictionary`2[]) (COMPLEX))

ETL Files

Histogram

JIT Disasms

System.Reflection.Metadata.Perf_TypeName.ParseAndGetAssemblyQualifiedName(input: typeof(System.Int32[,]))

ETL Files

Histogram

JIT Disasms

System.Reflection.Metadata.Perf_TypeName.Parse_AssemblyQualifiedName(input: typeof(System.Int32[*]))

ETL Files

Histogram

JIT Disasms

System.Reflection.Metadata.Perf_TypeName.Parse_AssemblyQualifiedName(input: typeof(System.Reflection.Metadata.NestedGeneric<String, Boolean>))

ETL Files

Histogram

JIT Disasms

System.Reflection.Metadata.Perf_TypeName.Parse_AssemblyQualifiedName(input: typeof(System.Int32[,]))

ETL Files

Histogram

JIT Disasms

System.Reflection.Metadata.Perf_TypeName.ParseAndGetAssemblyQualifiedName(input: typeof(System.Reflection.Metadata.NestedGeneric<String, Boolean>))

ETL Files

Histogram

JIT Disasms

System.Reflection.Metadata.Perf_TypeName.ParseAndGetAssemblyQualifiedName(input: typeof(System.Int32*))

ETL Files

Histogram

JIT Disasms

System.Reflection.Metadata.Perf_TypeName.ParseAndGetAssemblyQualifiedName(input: typeof(System.Int32[*]))

ETL Files

Histogram

JIT Disasms

System.Reflection.Metadata.Perf_TypeName.Parse_AssemblyQualifiedName(input: typeof(System.Int32*))

ETL Files

Histogram

JIT Disasms

System.Reflection.Metadata.Perf_TypeName.ParseAndGetAssemblyQualifiedName(input: typeof(System.Int32&))

ETL Files

Histogram

JIT Disasms

System.Reflection.Metadata.Perf_TypeName.ParseAndGetAssemblyQualifiedName(input: typeof(System.Reflection.Metadata.Nested))

ETL Files

Histogram

JIT Disasms

System.Reflection.Metadata.Perf_TypeName.ParseAndGetAssemblyQualifiedName(input: typeof(System.Collections.Generic.Dictionary`2[]) (COMPLEX))

ETL Files

Histogram

JIT Disasms

System.Reflection.Metadata.Perf_TypeName.Parse_FullNames(input: typeof(System.Reflection.Metadata.NestedGeneric<String, Boolean>))

ETL Files

Histogram

JIT Disasms

System.Reflection.Metadata.Perf_TypeName.ParseAndGetFullName(input: typeof(System.Reflection.Metadata.NestedGeneric<String, Boolean>))

ETL Files

Histogram

JIT Disasms

System.Reflection.Metadata.Perf_TypeName.ParseAndGetFullName(input: typeof(System.Collections.Generic.Dictionary<String, Boolean>))

ETL Files

Histogram

JIT Disasms

System.Reflection.Metadata.Perf_TypeName.Parse_FullNames(input: typeof(System.Collections.Generic.Dictionary`2[]) (COMPLEX))

ETL Files

Histogram

JIT Disasms

System.Reflection.Metadata.Perf_TypeName.ParseAndGetAssemblyQualifiedName(input: typeof(int))

ETL Files

Histogram

JIT Disasms

System.Reflection.Metadata.Perf_TypeName.ParseAndGetFullName(input: typeof(System.Collections.Generic.Dictionary`2[]))

ETL Files

Histogram

JIT Disasms

System.Reflection.Metadata.Perf_TypeName.ParseAndGetAssemblyQualifiedName(input: typeof(System.Int32[]))

ETL Files

Histogram

JIT Disasms

System.Reflection.Metadata.Perf_TypeName.ParseAndGetAssemblyQualifiedName(input: typeof(System.Collections.Generic.Dictionary<String, Boolean>))

ETL Files

Histogram

JIT Disasms

System.Reflection.Metadata.Perf_TypeName.Parse_AssemblyQualifiedName(input: typeof(System.Reflection.Metadata.Nested))

ETL Files

Histogram

JIT Disasms

System.Reflection.Metadata.Perf_TypeName.Parse_AssemblyQualifiedName(input: typeof(System.Collections.Generic.Dictionary<String, Boolean>))

ETL Files

Histogram

JIT Disasms

System.Reflection.Metadata.Perf_TypeName.Parse_FullNames(input: typeof(System.Collections.Generic.Dictionary`2[]))

ETL Files

Histogram

JIT Disasms

System.Reflection.Metadata.Perf_TypeName.Parse_AssemblyQualifiedName(input: typeof(System.Collections.Generic.Dictionary`2[]))

ETL Files

Histogram

JIT Disasms

System.Reflection.Metadata.Perf_TypeName.Parse_FullNames(input: typeof(System.Collections.Generic.Dictionary<String, Boolean>))

ETL Files

Histogram

JIT Disasms

System.Reflection.Metadata.Perf_TypeName.ParseAndGetAssemblyQualifiedName(input: typeof(System.Collections.Generic.Dictionary`2[]))

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 2dd5330804f9d4f49599d82c90a67892d4dd8af0
Compare c8f97975ab0d8ff84aebf176829e17f7c7052f03
Diff Diff
Configs CompilationMode:tiered, RunKind:micro

Improvements in System.Collections.Concurrent.IsEmpty<String>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
11.55 ns 4.38 ns 0.38 0.13 False
12.62 ns 5.96 ns 0.47 0.02 False
2.09 μs 1.50 μs 0.72 0.37 False

graph
graph
graph
Test Report

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.Collections.Concurrent.IsEmpty<String>*'
Details

System.Collections.Concurrent.IsEmpty<String>.Queue(Size: 512)

ETL Files

Histogram

JIT Disasms

System.Collections.Concurrent.IsEmpty<String>.Queue(Size: 0)

ETL Files

Histogram

JIT Disasms

System.Collections.Concurrent.IsEmpty<String>.Dictionary(Size: 0)

ETL Files

Histogram

JIT Disasms

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Activity

  1. performanceautofiler commented on Aug 13, 2026

    @performanceautofiler
    Author

    Run Information

    Name Value
    Architecture arm64
    OS ubuntu 22.04
    Queue AmpereUbuntu
    Baseline 2dd5330804f9d4f49599d82c90a67892d4dd8af0
    Compare c8f97975ab0d8ff84aebf176829e17f7c7052f03
    Diff Diff
    Configs CompilationMode:tiered, RunKind:micro

    Improvements in System.Numerics.Tensors.Tests.Perf_FloatingPointTensorPrimitives<Double>

    Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
    1.58 μs 1.37 μs 0.87 0.08 False
    61.65 ns 53.78 ns 0.87 0.09 False
    833.19 ns 732.76 ns 0.88 0.26 False

    graph
    graph
    graph
    Test Report

    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_FloatingPointTensorPrimitives<Double>*'
    Details

    System.Numerics.Tensors.Tests.Perf_FloatingPointTensorPrimitives<Double>.FusedMultiplyAdd_Vectors(BufferLength: 3079)

    ETL Files

    Histogram

    JIT Disasms

    System.Numerics.Tensors.Tests.Perf_FloatingPointTensorPrimitives<Double>.FusedMultiplyAdd_Vectors(BufferLength: 128)

    ETL Files

    Histogram

    JIT Disasms

    System.Numerics.Tensors.Tests.Perf_FloatingPointTensorPrimitives<Double>.FusedMultiplyAdd_ScalarAddend(BufferLength: 3079)

    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 2dd5330804f9d4f49599d82c90a67892d4dd8af0
    Compare c8f97975ab0d8ff84aebf176829e17f7c7052f03
    Diff Diff
    Configs CompilationMode:tiered, RunKind:micro

    Improvements in Microsoft.Extensions.Logging.FormattingOverhead

    Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
    695.64 ns 492.64 ns 0.71 0.57 False
    277.21 ns 209.56 ns 0.76 0.31 False
    184.13 ns 140.51 ns 0.76 0.19 False

    graph
    graph
    graph
    Test Report

    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 'Microsoft.Extensions.Logging.FormattingOverhead*'
    Details

    Microsoft.Extensions.Logging.FormattingOverhead.FourArguments_EnumerableArgument

    ETL Files

    Histogram

    JIT Disasms

    Microsoft.Extensions.Logging.FormattingOverhead.FourArguments_DefineMessage

    ETL Files

    Histogram

    JIT Disasms

    Microsoft.Extensions.Logging.FormattingOverhead.TwoArguments

    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 2dd5330804f9d4f49599d82c90a67892d4dd8af0
    Compare c8f97975ab0d8ff84aebf176829e17f7c7052f03
    Diff Diff
    Configs CompilationMode:tiered, RunKind:micro

    Improvements in System.Text.Json.Tests.Utf8JsonReaderCommentsTests

    Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
    4.46 μs 2.27 μs 0.51 0.00 False
    4.41 μs 2.26 μs 0.51 0.01 False

    graph
    graph
    Test Report

    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.Text.Json.Tests.Utf8JsonReaderCommentsTests*'
    Details

    System.Text.Json.Tests.Utf8JsonReaderCommentsTests.Utf8JsonReaderCommentParsing(CommentHandling: Skip, SegmentSize: 0, TestCase: LongMultiLine)

    ETL Files

    Histogram

    JIT Disasms

    System.Text.Json.Tests.Utf8JsonReaderCommentsTests.Utf8JsonReaderCommentParsing(CommentHandling: Allow, SegmentSize: 0, TestCase: LongMultiLine)

    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 2dd5330804f9d4f49599d82c90a67892d4dd8af0
    Compare c8f97975ab0d8ff84aebf176829e17f7c7052f03
    Diff Diff
    Configs CompilationMode:tiered, RunKind:micro

    Improvements in System.Numerics.Tensors.Tests.Perf_NumberTensorPrimitives<Double>

    Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
    851.09 ns 668.32 ns 0.79 0.30 False
    1.62 μs 1.41 μs 0.87 0.06 False

    graph
    graph
    Test Report

    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_NumberTensorPrimitives<Double>*'
    Details

    System.Numerics.Tensors.Tests.Perf_NumberTensorPrimitives<Double>.Max_Vector(BufferLength: 3079)

    ETL Files

    Histogram

    JIT Disasms

    System.Numerics.Tensors.Tests.Perf_NumberTensorPrimitives<Double>.AddMultiply_Vectors(BufferLength: 3079)

    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 2dd5330804f9d4f49599d82c90a67892d4dd8af0
    Compare c8f97975ab0d8ff84aebf176829e17f7c7052f03
    Diff Diff
    Configs CompilationMode:tiered, RunKind:micro

    Improvements in BenchmarksGame.KNucleotide_1

    Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
    281.27 ms 247.89 ms 0.88 0.00 False

    graph
    Test Report

    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.KNucleotide_1*'
    Details

    BenchmarksGame.KNucleotide_1.RunBench

    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 2dd5330804f9d4f49599d82c90a67892d4dd8af0
    Compare c8f97975ab0d8ff84aebf176829e17f7c7052f03
    Diff Diff
    Configs CompilationMode:tiered, RunKind:micro

    Improvements in System.Collections.TryGetValueTrue<String, String>

    Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
    10.57 μs 9.48 μs 0.90 0.11 False

    graph
    Test Report

    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.Collections.TryGetValueTrue<String, String>*'
    Details

    System.Collections.TryGetValueTrue<String, String>.OrderedDictionary(Size: 512)

    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 2dd5330804f9d4f49599d82c90a67892d4dd8af0
    Compare c8f97975ab0d8ff84aebf176829e17f7c7052f03
    Diff Diff
    Configs CompilationMode:tiered, RunKind:micro

    Improvements in System.Numerics.Tests.Perf_BigInteger

    Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
    78.38 ns 54.03 ns 0.69 0.18 False

    graph
    Test Report

    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.Tests.Perf_BigInteger*'
    Details

    System.Numerics.Tests.Perf_BigInteger.ToStringX(numberString: 123)

    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 2dd5330804f9d4f49599d82c90a67892d4dd8af0
    Compare c8f97975ab0d8ff84aebf176829e17f7c7052f03
    Diff Diff
    Configs CompilationMode:tiered, RunKind:micro

    Improvements in Benchstone.BenchI.BubbleSort2

    Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
    33.84 ms 31.70 ms 0.94 0.10 False

    graph
    Test Report

    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 'Benchstone.BenchI.BubbleSort2*'
    Details

    Benchstone.BenchI.BubbleSort2.Test

    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 2dd5330804f9d4f49599d82c90a67892d4dd8af0
    Compare c8f97975ab0d8ff84aebf176829e17f7c7052f03
    Diff Diff
    Configs CompilationMode:tiered, RunKind:micro

    Improvements in System.Text.Json.Serialization.Tests.ReadJson<HashSet<String>>

    Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
    12.91 μs 11.48 μs 0.89 0.20 False

    graph
    Test Report

    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.Text.Json.Serialization.Tests.ReadJson<HashSet<String>>*'
    Details

    System.Text.Json.Serialization.Tests.ReadJson<HashSet<String>>.DeserializeFromReader(Mode: SourceGen)

    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 2dd5330804f9d4f49599d82c90a67892d4dd8af0
    Compare c8f97975ab0d8ff84aebf176829e17f7c7052f03
    Diff Diff
    Configs CompilationMode:tiered, RunKind:micro

    Improvements in System.Collections.ContainsKeyTrue<String, String>

    Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
    10.51 μs 9.48 μs 0.90 0.09 False

    graph
    Test Report

    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.Collections.ContainsKeyTrue<String, String>*'
    Details

    System.Collections.ContainsKeyTrue<String, String>.OrderedDictionary(Size: 512)

    ETL Files

    Histogram

    JIT Disasms

    Docs

    Profiling workflow for dotnet/runtime repository
    Benchmarking workflow for dotnet/runtime repository

  2. EgorBo commented on Aug 13, 2026

    @EgorBo
    Member

    Should be dotnet/runtime#129688 I think (we were expecting improvements from it)

  3. LoopedBard3 commented on Aug 13, 2026

    @LoopedBard3
    Member

    🔍 Automated Triage Analysis

    Summary: Verified improvement in Utf8JsonReaderCommentParsing(CommentHandling: Skip, SegmentSize: 0, TestCase: LongMultiLine) — caused by commit 23ec3d982ce2.

    Finding Confidence: 5/5 (analysis accuracy)
    Improvement Confidence: 5/5 (likelihood of true improvement)

    Likely Cause: 23ec3d982ce25e7b3037296eeed2dec0d0837795

    🤖 Proposed Next Actions: Known-cause improvement — link & close — 0 done, 3 dry-run (rule R2_known_improvement — see Full Analysis for the table).

    📊 Full Analysis (click to expand)

    Summary: All 49 reported movements are genuine performance improvements — the 12 statistically sampled tests all show clean step-change gains (−6% to −62%) with strong signals (|z| = 2.5–26.1) over 297–300 historical runs, so finding confidence is very high (5/5). The gains span unrelated areas (Reflection TypeName parsing, ConcurrentQueue.IsEmpty, Utf8JsonReader comment parsing, Logging formatting, Tensors, BigInteger), which points at one or more broad JIT codegen changes in this 35-commit window rather than a single component fix; the leading candidate is f107b23 ("JIT: Avoid unnecessary argument spills in indirect call transformer"), but with multiple plausible JIT commits the attribution is moderate (improvement confidence 3/5) and bisection is recommended.

    Issue Overview

    • Issue: [Perf] Linux/arm64: 49 Improvements on 8/5/2026 1:23:13 AM +00:00 #77882 - [Perf] Linux/arm64: 49 Improvements on 8/5/2026 1:23:13 AM +00:00
    • Type: Performance Improvement
    • Date: 2026-08-05 | Queue: Ubuntu.2204.Arm64.Perf | OS/Arch: linux/arm64
    • Commits: 2dd53308 → c8f97975 (35 commits)
    • Labels: perf-improvement, arch-arm64, os-linux, runtime-coreclr, ampere, kind-micro, compilationmode-tiered, runkind-micro, bdn-update
    • Runtime stack: Desktop + CoreCLR (arm64, tiered) — arm64 CoreCLR JIT is the exercised codegen path.
    • Historical Data: Available (297–300 prior runs per sampled test; 1,197 before-runs, ~24–25 after-runs)

    Test Analysis

    12 representative tests sampled from the 49 improvements (units: ns; KNucleotide/BubbleSort in ns of the reported harness scale). All classified Improvement / StepChange by AnalyzeHistoricalData.

    Test Name Baseline Compare Δ% μ σ n z Thresh% Noise? Assessment
    Concurrent.IsEmpty.Queue(512) 11.547 4.377 -62.1% 10.333 0.904 299 -6.59 17.5% N Step change, new low plateau
    Concurrent.IsEmpty.Queue(0) 12.623 5.959 -52.8% 11.672 0.749 300 -7.63 12.8% N Step change, ~54% floor
    Utf8JsonReaderCommentParsing(Skip,LongMultiLine) 4464 2272 -49.1% 4398.9 81.6 300 -26.07 5% N Massive step, CV 1.9%
    BigInteger.ToStringX(123) 78.38 54.03 -31.1% 68.71 5.82 298 -2.52 16.9% N Step, landed mid-after-window
    Logging.FourArguments_EnumerableArgument 695.64 492.64 -29.2% 690.18 51.93 297 -3.80 15.1% N Step, no before/after overlap
    Logging.TwoArguments 184.13 140.51 -23.7% 175.03 5.73 298 -6.02 6.6% N Step, stable baseline
    Tensors.Max_Vector(3079) 851.09 668.32 -21.5% 805.81 50.33 298 -2.73 12.5% N Step over prior upward drift
    TypeName.Parse_AssemblyQualifiedName(Int32[]) 1158.21 899.78 -22.3% 1128.21 25.72 300 -8.88 5% N Step, disjoint ranges
    TypeName.Parse_AssemblyQualifiedName(int) 1073.18 842.59 -21.5% 1075.28 23.46 300 -9.92 5% N Step, stable baseline
    BenchmarksGame.KNucleotide_1.RunBench 281.27M 247.89M -11.9% 288.99M 4.76M 300 -8.64 5% N Step on top of prior drift
    Benchstone.BubbleSort2.Test 33.84M 31.70M -6.3% 33.80M 0.71M 300 -2.95 5% N Modest but genuine step
    Collections.ContainsKeyTrue.OrderedDictionary(512) 10512 9481 -9.8% 10464.5 227.5 300 -4.32 5% N Step below historical floor

    Legend: μ=mean, σ=stddev, n=runs, z=z-score, Thresh%=adaptive threshold

    Finding Confidence: 5/5 - Comprehensive historical data (≈300 before-runs per test, HasSufficientData=true), tight after-clusters disjoint from before-ranges, no noise classifications. The full set of 49 tests was not each run through the statistical tool, but the sampled spread (largest, mid, and smallest deltas across every affected namespace) is uniformly clean.

    Candidate Stack Relevance

    Detected stack: Desktop + CoreCLR (arm64). Relevant = src/coreclr/jit (arm64 codegen exercised). Shared = BCL/eng/native. LessLikely = mono/wasm-only trees.

    Commit Touched Paths (summary) Relevance Notes
    f107b23 src/coreclr/jit (indirect call transformer) Relevant Reduces arg spills on indirect/virtual/GDV calls — broad codegen impact across dispatch-heavy benchmarks.
    eb3dce1 src/coreclr/jit/objectalloc.cpp Relevant CEA (enumerator) cloning fix — affects IEnumerable/GDV allocation paths (e.g. Logging EnumerableArgument, span enumeration).
    ca4ed7d src/coreclr, src/native Relevant Restores symbol-free decoding for CORINFO_HELP_NEW* allocation helpers — touches the allocation-helper fast path used everywhere.
    23ec3d9 src/coreclr (arm64 SIMD) Relevant arm64 ExtractMostSignificantBits consumer optimization — plausibly explains the Tensors vector gains but not the scalar/parse benchmarks.
    18f89a4 src/coreclr (x64 barrier) LessLikely VOLATILE_MEMORY_BARRIER change is x64-Unix only; arm64 not affected.
    e275aeb src/coreclr (xarch bit idioms) LessLikely bzhi/bts/btc emit is x86/x64 only; arm64 not exercised.
    ae97cad src/coreclr (wasm Virtual IP) LessLikely WASM-specific JIT path; not exercised by CoreCLR arm64.

    Confirmed Improvements

    The 12 sampled tests below are all confirmed genuine improvements (representative of the full 49). Attribution is shared across the whole group because the movements co-occur on the same date/commit and no single commit obviously accounts for every area.

    System.Text.Json Utf8JsonReaderCommentParsing (Skip/Allow, LongMultiLine) (-49.1% / -48.7%)

    • Delta: 4464 → 2272 ns (-49.1%)
    • Historical Context: μ=4398.9 (σ=81.6, n=300); z=-26.07; adaptive threshold=5%
    • Assessment: Massive step change, historically ultra-stable (CV=1.9%). Highest-confidence signal in the set.
    • Finding Confidence: 5/5 - excellent, stable history; compare cluster 2207–2272 cleanly disjoint.
    • Improvement Confidence: 3/5 - unambiguous real gain, but single-commit attribution unverified within a 35-commit range.
    • Likely Cause: f107b23 - "JIT: Avoid unnecessary argument spills in indirect call transformer"
      • Affected Areas: JIT / codegen (indirect & virtual dispatch, GDV)
      • Stack Relevance: Relevant
      • Rationale: Utf8JsonReader comment parsing is virtual-dispatch and helper-call heavy; reducing argument spills in the indirect-call transformer improves such hot loops broadly. Timing aligns with the compare commit. Attribution is not verified — a ~50% halving is large for this change alone, so bisection is warranted.
      • Candidates Considered:
        • eb3dce1 - CEA/enumerator allocation cloning fix
        • ca4ed7d - allocation-helper decoding restore
    • Verification Status: Not verified (bisection recommended)

    System.Collections.Concurrent.IsEmpty.Queue (Size 512 / 0) (-62.1% / -52.8%)

    • Delta: 11.547 → 4.377 ns (-62.1%); 12.623 → 5.959 ns (-52.8%)
    • Historical Context: μ=10.333/11.672 (σ=0.90/0.75, n=299/300); z=-6.59/-7.63; adaptive threshold=17.5%/12.8%
    • Assessment: Both step to a new low plateau; identical timing suggests a shared root cause.
    • Finding Confidence: 5/5 - large before-history; compare clusters (4.37–4.40, 5.67–6.02) well below all prior regimes.
    • Improvement Confidence: 3/5 - clearly real; attribution shared with the group, unverified.
    • Likely Cause: f107b23 (group attribution); alternately allocation/JIT commits above.
      • Stack Relevance: Relevant
      • Rationale: IsEmpty on ConcurrentQueue is a tiny hot method dominated by field reads and branch codegen; a broad JIT codegen/inlining improvement matches the >50% drop. The two sizes moving together on the same commit corroborate a shared JIT cause.
    • Verification Status: Not verified

    System.Reflection.Metadata.Perf_TypeName.* (Parse/ParseAndGet family) (-20% to -22%)

    • Delta: e.g. Parse_AssemblyQualifiedName(Int32[]): 1158.21 → 899.78 ns (-22.3%)
    • Historical Context: μ≈1128/1075 (σ≈26/23, n=300); z=-8.88/-9.92; adaptive threshold=5%
    • Assessment: Consistent ~20% step across the entire TypeName parsing family (30+ variants), very stable history.
    • Finding Confidence: 5/5 - tight, disjoint before/after ranges.
    • Improvement Confidence: 3/5 - real and highly consistent across the family; commit-level attribution unverified.
    • Likely Cause: f107b23 (group attribution)
      • Stack Relevance: Relevant
      • Rationale: TypeName parsing is span- and dispatch-heavy; the uniform ~20% shift across every parameterization is characteristic of a codegen-level improvement rather than an algorithmic change to a single method.
    • Verification Status: Not verified

    Microsoft.Extensions.Logging FormattingOverhead (FourArguments_EnumerableArgument -29.2%, TwoArguments -23.7%, FourArguments_DefineMessage -24.4%)

    • Historical Context: e.g. TwoArguments μ=175.0 (σ=5.7, n=298); z=-6.02; threshold=6.6%
    • Assessment: Step change, after-values entirely below before-range.
    • Finding Confidence: 5/5
    • Improvement Confidence: 3/5
    • Likely Cause: eb3dce1 (CEA/enumerator cloning) is especially plausible for EnumerableArgument; group JIT attribution otherwise.
      • Stack Relevance: Relevant
      • Rationale: The EnumerableArgument path materializes an enumerator; the CEA cloning fix directly affects such allocation/enumeration codegen. Unverified.
    • Verification Status: Not verified

    Tensors, BigInteger, KNucleotide, BubbleSort, OrderedDictionary (-6% to -31%)

    • Tensors.Max_Vector(3079): 851.09 → 668.32 (-21.5%, z=-2.73) — plausibly aided by arm64 SIMD commit 23ec3d9.
    • BigInteger.ToStringX(123): 78.38 → 54.03 (-31.1%, z=-2.52) — improvement landed mid-after-window; confirm plateau.
    • KNucleotide.RunBench: -11.9% (z=-8.64); BubbleSort2: -6.3% (z=-2.95); OrderedDictionary ContainsKey/TryGetValue(512): ~-9.8% (z=-4.32).
    • Finding Confidence: 4–5/5 (BigInteger/Tensors slightly lower due to multi-regime/drift history).
    • Improvement Confidence: 3/5 - genuine; distributed across areas, group JIT attribution.
    • Verification Status: Not verified

    Open Questions

    • Historical Data: Available and strong (≈300 runs/test); BigInteger and ConcurrentQueue show multi-regime history (CV 8.5%/8.7%) that widens thresholds but does not overturn the step-change signal.
    • Confidence Limitations: Large commit range (35 commits) with multiple plausible JIT candidates; no single commit obviously explains the full breadth (parse + JSON + collections + tensors), so the group attribution to [f107b23] is a hypothesis, not a confirmed cause.
    • Verification Needed: Bisection across [2dd53308]…[c8f97975] on a high-signal, cheap test (e.g. TypeName.Parse_AssemblyQualifiedName or ConcurrentQueue.IsEmpty) to isolate the responsible commit(s).
    • Bisection Status: Not performed (to be handled separately).
    • Correlation Signal: 12 co-occurring sibling arm64 improvement issues in the same window strongly reinforce that these are real, shared-cause improvements rather than noise.

    Recommended Actions

    1. Bisection - Run bisection on commits 2dd53308…c8f97975 using RunWithBuildAtHash on System.Reflection.Metadata.Perf_TypeName.Parse_AssemblyQualifiedName(input: typeof(int)) and System.Collections.Concurrent.IsEmpty<String>.Queue(Size: 512) (high z, cheap, distinct areas) to isolate the improving commit(s).
    2. Verification - Confirm the leading JIT candidate f107b23 with RunWithBuildAtHash vs its parent; if it does not reproduce the breadth, test [eb3dce1] and [ca4ed7d].
    3. Follow-up - Confirm BigInteger.ToStringX(123) plateau (~54) holds across additional after-runs, since the gain landed mid-window.

    Bisection Results

    Test Status Culprit Commit Relevance Reported Diff (issue) Bisected Diff (at culprit)
    Int32[])) 🔁 Did not reproduce - - 1.2→0.9 μs (-22%) ≈ (baseline ≈ head)
    Queue(Size: 512) 🔁 Did not reproduce - - 11.5→4.4 ns (-62%) ≈ (baseline ≈ head)
    FusedMultiplyAdd_Vectors(BufferLength... 🔁 Did not reproduce - - 1.6→1.4 μs (-13%) ≈ (baseline ≈ head)
    FourArguments_EnumerableArgument 🔁 Did not reproduce - - 695.6→492.6 ns (-29%) ≈ (baseline ≈ head)
    Utf8JsonReaderCommentParsing(CommentH... ✅ Culprit found 23ec3d982ce2 ✅ RELATED 4.5→2.3 μs (-49%) 4.4→2.3 μs (-48%)
    RunBench 🔁 Did not reproduce - - 281.3→247.9 ms (-12%) ≈ (baseline ≈ head)
    Test 🔁 Did not reproduce - - 33.8→31.7 ms (-6%) ≈ (baseline ≈ head)

    Total bisection time: 70m 28s
    Tests measured: 7/7
    Culprit found: 1/7

    System.Reflection.Metadata.Perf_TypeName.Parse_AssemblyQualifiedName(input: typeof(System.Int32[]))

    • Status: inconclusive
    Bisection details
    • Baseline: 1158.205 ns

    Per-commit measurements (oldest → newest) (ns)

    # Commit Result Measurement
    0 2dd5330804f9 baseline 958.976 ns
    12 24630fa3a58e - 922.866 ns
    23 f7d2d521667a - 901.942 ns
    35 c8f97975ab0d head 932.826 ns

    Helix jobs

    Job ID
    4eeb69ba-5669-43bb-8479-13e2ced997b4

    System.Collections.Concurrent.IsEmpty<String>.Queue(Size: 512)

    • Status: inconclusive
    Bisection details
    • Baseline: 11.547 ns

    Per-commit measurements (oldest → newest) (ns)

    # Commit Result Measurement
    0 2dd5330804f9 baseline 4.396 ns
    12 24630fa3a58e - 4.378 ns
    23 f7d2d521667a - 4.383 ns
    35 c8f97975ab0d head 4.393 ns

    Helix jobs

    Job ID
    e2193ea7-246a-48b9-b5da-0b48d719c52b

    System.Numerics.Tensors.Tests.Perf_FloatingPointTensorPrimitives<Double>.FusedMultiplyAdd_Vectors(BufferLength: 3079)

    • Status: inconclusive
    Bisection details
    • Baseline: 1.582 μs

    Per-commit measurements (oldest → newest) (μs)

    # Commit Result Measurement
    0 2dd5330804f9 baseline 1.388 μs
    12 24630fa3a58e - 1.384 μs
    23 f7d2d521667a - 1.388 μs
    35 c8f97975ab0d head 1.367 μs

    Helix jobs

    Job ID
    937ec104-3f5f-48ae-a822-f1327e79f7d0

    Microsoft.Extensions.Logging.FormattingOverhead.FourArguments_EnumerableArgument

    • Status: inconclusive
    Bisection details
    • Baseline: 695.637 ns

    Per-commit measurements (oldest → newest) (ns)

    # Commit Result Measurement
    0 2dd5330804f9 baseline 530.421 ns
    12 24630fa3a58e - 513.159 ns
    23 f7d2d521667a - 514.868 ns
    35 c8f97975ab0d head 603.236 ns

    Helix jobs

    Job ID
    e6361b2a-e037-43dd-addd-3107397fdcff

    System.Text.Json.Tests.Utf8JsonReaderCommentsTests.Utf8JsonReaderCommentParsing(CommentHandling: Skip, SegmentSize: 0, TestCase: LongMultiLine)

    • Culprit: 23ec3d982ce2
    • Relevance: RELATED
    • Explanation: Commit 23ec3d98 'arm64: Optimize ARM64 compare mask ExtractMostSignificantBits consumers (#129688)' is a JIT optimization targeting Arm64 vectorized ExtractMostSignificantBits code. The benchmark runs on Arm64 (Neoverse-N1) and Utf8JsonReader comment scanning uses vectorized most-significant-bit extraction, so the ~2x speedup (4378 ns -> 2266 ns) at exactly this commit is directly explained.
    Bisection details
    • Culprit: 23ec3d982ce2
    • Relevance: RELATED
    • Baseline: 4.464 μs
    • Culprit value: 2.263 μs

    Per-commit measurements (oldest → newest) (μs)

    # Commit Result Measurement
    0 2dd5330804f9 baseline/good 4.511 μs
    12 24630fa3a58e good 4.419 μs
    23 f7d2d521667a good 4.379 μs
    24 23ec3d982ce2 culprit/bad 2.263 μs
    25 18f89a452f2a bad 2.266 μs
    27 ff5613f81da6 bad 2.207 μs
    31 173e6b40e02c bad 2.244 μs
    35 c8f97975ab0d head/bad 2.239 μs

    Helix jobs

    Job ID
    34d5c276-628d-4556-bdbe-a2d62e61c546
    8f3b08ee-ebae-441d-8d69-9892a5d2a9fa
    591db1c3-3d71-48d3-8884-1e609fd7604e

    BenchmarksGame.KNucleotide_1.RunBench

    • Status: inconclusive
    Bisection details
    • Baseline: 281.270 ms

    Per-commit measurements (oldest → newest) (ms)

    # Commit Result Measurement
    0 2dd5330804f9 baseline 247.971 ms
    12 24630fa3a58e - 248.464 ms
    23 f7d2d521667a - 247.943 ms
    35 c8f97975ab0d head 248.445 ms

    Helix jobs

    Job ID
    88c1a361-554e-4627-ada5-a50c2855114a

    Benchstone.BenchI.BubbleSort2.Test

    • Status: inconclusive
    Bisection details
    • Baseline: 33.838 ms

    Per-commit measurements (oldest → newest) (ms)

    # Commit Result Measurement
    0 2dd5330804f9 baseline 31.729 ms
    12 24630fa3a58e - 31.671 ms
    23 f7d2d521667a - 31.600 ms
    35 c8f97975ab0d head 31.701 ms

    Helix jobs

    Job ID
    6db00153-bd46-4ced-8d41-060eae0197ce

    🤖 Proposed Next Actions

    Rule: R2_known_improvement — Known-cause improvement — link & close.

    Verified improvement attributed to commit 23ec3d982ce2 (finding 5/5, improvement 5/5, bisection RELATED).

    # Action Status Details
    1 Back-reference cause PR ⏭️ Skipped (dry-run) on culprit PR for 23ec3d982ce2
    2 Remove label ⏭️ Skipped (dry-run) untriaged
    3 Close issue ⏭️ Skipped (dry-run) reason completed

    🦆 Pre-bisection Re-analysis (advisory)

    ⚠️ Disputes the pre-bisection plan — advisory only, not applied

    Flags: wasted-bisection-slot, possible-noise

    Rationale: The Tensors, KNucleotide, and BubbleSort candidates all derive from the single group with finding confidence 0/5, unknown stack relevance, and no likely commit, so queuing three expensive bisection slots for an unverified finding is wasteful; the JSON, Concurrent Queue, TypeName, and Logging candidates are well-supported (findingConf 5/5, Relevant) and should stay.

    Suggested drop from bisection: System.Numerics.Tensors.Tests.Perf_FloatingPointTensorPrimitives<Double>.FusedMultiplyAdd_Vectors(BufferLength: 3079), BenchmarksGame.KNucleotide_1.RunBench, Benchstone.BenchI.BubbleSort2.Test (advisory — not applied)

    This critique is advisory in the current configuration and did not change which tests were bisected.

    🦆 Re-analysis (advisory)

    ⚠️ Disputes the analysis — advisory only, not applied

    Flags: overconfident, weak-bisection-evidence

    Rationale: The overall Improvement Confidence of 5/5 is not justified because every per-finding change confidence is only 3/5 and six of seven bisections were inconclusive; only the Utf8JsonReader benchmark converged. The culprit 23ec3d9 is acceptable since it is the sole SHA the bisection actually surfaced (relevance RELATED), so it is not disputed, but the change confidence should be lowered to match the single-benchmark evidence.

    Suggested confidence: Change Confidence → 3/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-13 12:02 UTC

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions