dotnet / dotnet/perf-autofiling-issues

[Perf] Linux/arm64: 186 Improvements on 1/23/2026 10:32:11 PM +00:00

Open
#68,201 7 comments 0 reactions 0 assignees View on GitHub
ampere arch-arm64 branch-refs/heads/main kind-micro os-linux perf-improvement runtime-coreclr untriaged
Dominant language
No language data
Stars
10
Forks
8
PR merge metrics
PR metrics pending

Description

### Run Information

Name | Value
-- | --
Architecture | arm64
OS | ubuntu 22.04
Queue | AmpereUbuntu
Baseline | [b1d2e4aa8af89cfa795015e30ef70d24ec92f67f](https://github.com/dotnet/runtime/commit/b1d2e4aa8af89cfa795015e30ef70d24ec92f67f)
Compare | [9baed28a0526f4c164ba1043edeeb8718df7aabb](https://github.com/dotnet/runtime/commit/9baed28a0526f4c164ba1043edeeb8718df7aabb)
Diff | [Diff](https://github.com/dotnet/runtime/compare/b1d2e4aa8af89cfa795015e30ef70d24ec92f67f...9baed28a0526f4c164ba1043edeeb8718df7aabb)
Configs | CompilationMode:tiered, RunKind:micro

### Improvements in System.Collections.Concurrent.IsEmpty<Int32>

Benchmark | Baseline | Test | Test/Base | Test Quality | Edge Detector | Baseline IR | Compare IR | IR Ratio
-- | -- | -- | -- | -- | -- | -- | -- | --
|

  • [Dictionary - Duration of single invocation]()
  • πŸ“ - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 3.85 ns | 2.65 ns | 0.69 | 0.26 | False | | |
|
  • [Queue - Duration of single invocation]()
  • πŸ“ - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 3.30 ns | 2.03 ns | 0.62 | 0.21 | False | | |
|
  • [Bag - Duration of single invocation]()
  • πŸ“ - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 5.65 ns | 4.40 ns | 0.78 | 0.24 | False | | |
|
  • [Bag - Duration of single invocation]()
  • πŸ“ - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 6.38 ns | 5.19 ns | 0.81 | 0.21 | False | | |

![graph]()
![graph]()
![graph]()
![graph]()
[Test Report]()

### Repro
General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

```cmd
git clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.Concurrent.IsEmpty*'
```

### System.Collections.Concurrent.IsEmpty<Int32>.Dictionary(Size: 512)

#### ETL Files

#### Histogram

#### JIT Disasms

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

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Collections.Concurrent.IsEmpty<Int32>.Bag(Size: 512)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Collections.Concurrent.IsEmpty<Int32>.Bag(Size: 0)

#### ETL Files

#### Histogram

#### JIT Disasms

### Docs

[Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md)
[Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

---

### Run Information

Name | Value
-- | --
Architecture | arm64
OS | ubuntu 22.04
Queue | AmpereUbuntu
Baseline | [b1d2e4aa8af89cfa795015e30ef70d24ec92f67f](https://github.com/dotnet/runtime/commit/b1d2e4aa8af89cfa795015e30ef70d24ec92f67f)
Compare | [9baed28a0526f4c164ba1043edeeb8718df7aabb](https://github.com/dotnet/runtime/commit/9baed28a0526f4c164ba1043edeeb8718df7aabb)
Diff | [Diff](https://github.com/dotnet/runtime/compare/b1d2e4aa8af89cfa795015e30ef70d24ec92f67f...9baed28a0526f4c164ba1043edeeb8718df7aabb)
Configs | CompilationMode:tiered, RunKind:micro

### Improvements in Microsoft.Extensions.Logging.EventSourceLogger

Benchmark | Baseline | Test | Test/Base | Test Quality | Edge Detector | Baseline IR | Compare IR | IR Ratio
-- | -- | -- | -- | -- | -- | -- | -- | --
|

  • [NestedScopes_TwoMessages - Duration of single invocation]()
  • πŸ“ - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 6.29 ΞΌs | 3.36 ΞΌs | 0.53 | 0.69 | False | | |
|
  • [NestedScopes_TwoMessages - Duration of single invocation]()
  • πŸ“ - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 6.90 ΞΌs | 3.27 ΞΌs | 0.47 | 0.70 | False | | |

![graph]()
![graph]()
[Test Report]()

### Repro
General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

```cmd
git clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'Microsoft.Extensions.Logging.EventSourceLogger*'
```

### Microsoft.Extensions.Logging.EventSourceLogger.NestedScopes_TwoMessages(HasSubscribers: True, Json: True)

#### ETL Files

#### Histogram

#### JIT Disasms

### Microsoft.Extensions.Logging.EventSourceLogger.NestedScopes_TwoMessages(HasSubscribers: True, Json: False)

#### ETL Files

#### Histogram

#### JIT Disasms

### Docs

[Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md)
[Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

---

### Run Information

Name | Value
-- | --
Architecture | arm64
OS | ubuntu 22.04
Queue | AmpereUbuntu
Baseline | [b1d2e4aa8af89cfa795015e30ef70d24ec92f67f](https://github.com/dotnet/runtime/commit/b1d2e4aa8af89cfa795015e30ef70d24ec92f67f)
Compare | [9baed28a0526f4c164ba1043edeeb8718df7aabb](https://github.com/dotnet/runtime/commit/9baed28a0526f4c164ba1043edeeb8718df7aabb)
Diff | [Diff](https://github.com/dotnet/runtime/compare/b1d2e4aa8af89cfa795015e30ef70d24ec92f67f...9baed28a0526f4c164ba1043edeeb8718df7aabb)
Configs | CompilationMode:tiered, RunKind:micro

### Improvements in System.Memory.Span<Int32>

Benchmark | Baseline | Test | Test/Base | Test Quality | Edge Detector | Baseline IR | Compare IR | IR Ratio
-- | -- | -- | -- | -- | -- | -- | -- | --
|

  • [SequenceEqual - Duration of single invocation]()
  • πŸ“ - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 9.81 ns | 8.72 ns | 0.89 | 0.20 | False | | |
|
  • [Fill - Duration of single invocation]()
  • πŸ“ - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 1.33 ns | 0.28 ns | 0.21 | 0.28 | False | | |
|
  • [Reverse - Duration of single invocation]()
  • πŸ“ - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 5.84 ns | 4.31 ns | 0.74 | 0.20 | False | | |
|
  • [LastIndexOfValue - Duration of single invocation]()
  • πŸ“ - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 7.61 ns | 5.64 ns | 0.74 | 0.28 | False | | |
|
  • [EndsWith - Duration of single invocation]()
  • πŸ“ - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 8.32 ns | 6.88 ns | 0.83 | 0.25 | False | | |
|
  • [IndexOfAnyThreeValues - Duration of single invocation]()
  • πŸ“ - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 12.22 ns | 11.13 ns | 0.91 | 0.21 | False | | |
|
  • [Reverse - Duration of single invocation]()
  • πŸ“ - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 2.79 ns | 1.63 ns | 0.58 | 0.12 | False | | |
|
  • [BinarySearch - Duration of single invocation]()
  • πŸ“ - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 9.72 ns | 8.71 ns | 0.90 | 0.21 | False | | |
|
  • [Clear - Duration of single invocation]()
  • πŸ“ - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 4.59 ns | 2.88 ns | 0.63 | 0.31 | False | | |
|
  • [SequenceEqual - Duration of single invocation]()
  • πŸ“ - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 2.61 ns | 1.20 ns | 0.46 | 0.21 | False | | |
|
  • [LastIndexOfAnyValues - Duration of single invocation]()
  • πŸ“ - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 10.18 ns | 8.86 ns | 0.87 | 0.25 | False | | |
|
  • [Clear - Duration of single invocation]()
  • πŸ“ - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 1.88 ns | 0.76 ns | 0.40 | 0.25 | False | | |

![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

```cmd
git clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Memory.Span*'
```

### System.Memory.Span<Int32>.SequenceEqual(Size: 33)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Memory.Span<Int32>.Fill(Size: 4)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Memory.Span<Int32>.Reverse(Size: 33)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Memory.Span<Int32>.LastIndexOfValue(Size: 33)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Memory.Span<Int32>.EndsWith(Size: 33)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Memory.Span<Int32>.IndexOfAnyThreeValues(Size: 33)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Memory.Span<Int32>.Reverse(Size: 4)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Memory.Span<Int32>.BinarySearch(Size: 33)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Memory.Span<Int32>.Clear(Size: 33)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Memory.Span<Int32>.SequenceEqual(Size: 4)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Memory.Span<Int32>.LastIndexOfAnyValues(Size: 33)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Memory.Span<Int32>.Clear(Size: 4)

#### ETL Files

#### Histogram

#### JIT Disasms

### Docs

[Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md)
[Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

---

### Run Information

Name | Value
-- | --
Architecture | arm64
OS | ubuntu 22.04
Queue | AmpereUbuntu
Baseline | [b1d2e4aa8af89cfa795015e30ef70d24ec92f67f](https://github.com/dotnet/runtime/commit/b1d2e4aa8af89cfa795015e30ef70d24ec92f67f)
Compare | [9baed28a0526f4c164ba1043edeeb8718df7aabb](https://github.com/dotnet/runtime/commit/9baed28a0526f4c164ba1043edeeb8718df7aabb)
Diff | [Diff](https://github.com/dotnet/runtime/compare/b1d2e4aa8af89cfa795015e30ef70d24ec92f67f...9baed28a0526f4c164ba1043edeeb8718df7aabb)
Configs | CompilationMode:tiered, RunKind:micro

### Improvements in System.Numerics.Tensors.Tests.Perf_NumberTensorPrimitives<Single>

Benchmark | Baseline | Test | Test/Base | Test Quality | Edge Detector | Baseline IR | Compare IR | IR Ratio
-- | -- | -- | -- | -- | -- | -- | -- | --
|

  • [Add_Scalar - Duration of single invocation]()
  • πŸ“ - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 22.25 ns | 20.70 ns | 0.93 | 0.09 | False | | |
|
  • [Max_Vector - Duration of single invocation]()
  • πŸ“ - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 29.32 ns | 27.23 ns | 0.93 | 0.01 | False | | |
|
  • [Max_Scalar - Duration of single invocation]()
  • πŸ“ - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 22.10 ns | 20.21 ns | 0.91 | 0.10 | False | | |
|
  • [Add_Vector - Duration of single invocation]()
  • πŸ“ - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 29.57 ns | 27.22 ns | 0.92 | 0.01 | False | | |
|
  • [AddMultiply_ScalarAddend - Duration of single invocation]()
  • πŸ“ - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 31.70 ns | 29.20 ns | 0.92 | 0.01 | False | | |
|
  • [BitwiseAnd_Scalar - Duration of single invocation]()
  • πŸ“ - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 22.31 ns | 20.60 ns | 0.92 | 0.17 | False | | |
|
  • [Abs - Duration of single invocation]()
  • πŸ“ - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 21.50 ns | 20.06 ns | 0.93 | 0.34 | False | | |
|
  • [BitwiseAnd_Vector - Duration of single invocation]()
  • πŸ“ - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 29.42 ns | 27.51 ns | 0.94 | 0.01 | False | | |

![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

```cmd
git clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Numerics.Tensors.Tests.Perf_NumberTensorPrimitives*'
```

### System.Numerics.Tensors.Tests.Perf_NumberTensorPrimitives<Single>.Add_Scalar(BufferLength: 128)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Numerics.Tensors.Tests.Perf_NumberTensorPrimitives<Single>.Max_Vector(BufferLength: 128)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Numerics.Tensors.Tests.Perf_NumberTensorPrimitives<Single>.Max_Scalar(BufferLength: 128)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Numerics.Tensors.Tests.Perf_NumberTensorPrimitives<Single>.Add_Vector(BufferLength: 128)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Numerics.Tensors.Tests.Perf_NumberTensorPrimitives<Single>.AddMultiply_ScalarAddend(BufferLength: 128)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Numerics.Tensors.Tests.Perf_NumberTensorPrimitives<Single>.BitwiseAnd_Scalar(BufferLength: 128)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Numerics.Tensors.Tests.Perf_NumberTensorPrimitives<Single>.Abs(BufferLength: 128)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Numerics.Tensors.Tests.Perf_NumberTensorPrimitives<Single>.BitwiseAnd_Vector(BufferLength: 128)

#### ETL Files

#### Histogram

#### JIT Disasms

### Docs

[Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md)
[Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Contributor guide

No contributing guide indexed for this repository

Research direction

Start with the benchmark sources named in the report: src/benchmarks/micro/libraries/System.Collections/Concurrent/IsEmpty.cs and src/benchmarks/micro/libraries/Microsoft.Extensions.Logging/EventSourceBenchmark.cs. Read docs/benchmarking-workflow-dotnet-runtime.md, then run the supplied scripts/benchmarks_ci.py command to verify the arm64 results. The issue does not define a code change or completion criteria beyond investigating the reported improvements.

Written by the indexing model from the issue text.

Assessment

Tech stack
csharp, python
Domain
performance
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
20/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.