dotnet / dotnet/perf-autofiling-issues

[Perf] Linux/x64: 49 Improvements on 8/4/2026 8:53:30 PM +00:00

Open
#77,695 2 comments 0 reactions 0 assignees View on GitHub
arch-x64 bdn-update branch-refs/heads/main compilationmode-tiered kind-micro Look Again os-linux perf-improvement runkind-micro runtime-coreclr untriaged
Dominant language
No language data
Stars
10
Forks
8
PR merge metrics
PR metrics pending

Description

### Run Information

Name | Value
-- | --
Architecture | x64
OS | ubuntu 22.04
Queue | ViperUbuntu
Baseline | [2dd5330804f9d4f49599d82c90a67892d4dd8af0](https://github.com/dotnet/runtime/commit/2dd5330804f9d4f49599d82c90a67892d4dd8af0)
Compare | [173e6b40e02cd1652102c09e07bd4cf7320b3d4d](https://github.com/dotnet/runtime/commit/173e6b40e02cd1652102c09e07bd4cf7320b3d4d)
Diff | [Diff](https://github.com/dotnet/runtime/compare/2dd5330804f9d4f49599d82c90a67892d4dd8af0...173e6b40e02cd1652102c09e07bd4cf7320b3d4d)
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
-- | -- | -- | -- | -- | -- | -- | -- | --
|

  • [Parse_AssemblyQualifiedName - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 528.17 ns | 443.50 ns | 0.84 | 0.03 | False | | |
|
  • [Parse_AssemblyQualifiedName - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 564.58 ns | 478.50 ns | 0.85 | 0.03 | False | | |
|
  • [Parse_FullNames - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 1155.09 ns | 987.33 ns | 0.85 | 0.01 | False | | |
|
  • [Parse_FullNames - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 3.17 μs | 2.71 μs | 0.85 | 0.02 | False | | |
|
  • [Parse_AssemblyQualifiedName - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 543.35 ns | 465.46 ns | 0.86 | 0.03 | False | | |
|
  • [ParseAndGetAssemblyQualifiedName - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 619.65 ns | 532.43 ns | 0.86 | 0.03 | False | | |
|
  • [ParseAndGetAssemblyQualifiedName - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 1.99 μs | 1.72 μs | 0.86 | 0.01 | False | | |
|
  • [Parse_AssemblyQualifiedName - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 1.65 μs | 1.43 μs | 0.86 | 0.03 | False | | |
|
  • [Parse_AssemblyQualifiedName - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 1.62 μs | 1.40 μs | 0.86 | 0.03 | False | | |
|
  • [ParseAndGetAssemblyQualifiedName - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 594.27 ns | 513.45 ns | 0.86 | 0.03 | False | | |
|
  • [Parse_AssemblyQualifiedName - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 1.64 μs | 1.41 μs | 0.86 | 0.02 | False | | |
|
  • [Parse_AssemblyQualifiedName - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 499.38 ns | 432.10 ns | 0.87 | 0.02 | False | | |
|
  • [Parse_AssemblyQualifiedName - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 553.59 ns | 479.65 ns | 0.87 | 0.01 | False | | |
|
  • [ParseAndGetAssemblyQualifiedName - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 2.01 μs | 1.74 μs | 0.87 | 0.02 | False | | |
|
  • [Parse_FullNames - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 1.19 μs | 1.04 μs | 0.87 | 0.02 | False | | |
|
  • [ParseAndGetAssemblyQualifiedName - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 670.79 ns | 582.90 ns | 0.87 | 0.01 | False | | |
|
  • [Parse_AssemblyQualifiedName - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 551.08 ns | 478.88 ns | 0.87 | 0.04 | False | | |
|
  • [Parse_AssemblyQualifiedName - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 3.59 μs | 3.14 μs | 0.88 | 0.02 | False | | |
|
  • [ParseAndGetAssemblyQualifiedName - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 660.10 ns | 579.07 ns | 0.88 | 0.02 | False | | |
|
  • [ParseAndGetFullName - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 1.47 μs | 1.29 μs | 0.88 | 0.01 | False | | |
|
  • [ParseAndGetFullName - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 1.42 μs | 1.25 μs | 0.88 | 0.02 | False | | |
|
  • [ParseAndGetAssemblyQualifiedName - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 645.92 ns | 568.77 ns | 0.88 | 0.02 | False | | |
|
  • [Parse_FullNames - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 1.20 μs | 1.06 μs | 0.88 | 0.02 | False | | |
|
  • [ParseAndGetAssemblyQualifiedName - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 1.99 μs | 1.76 μs | 0.88 | 0.02 | False | | |
|
  • [ParseAndGetAssemblyQualifiedName - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 4.30 μs | 3.79 μs | 0.88 | 0.01 | False | | |
|
  • [ParseAndGetAssemblyQualifiedName - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 640.45 ns | 565.93 ns | 0.88 | 0.01 | False | | |
|
  • [ParseAndGetFullName - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 3.80 μs | 3.37 μs | 0.89 | 0.02 | False | | |
|
  • [ParseAndGetAssemblyQualifiedName - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 661.27 ns | 591.37 ns | 0.89 | 0.01 | False | | |
|
  • [ParseAndGetFullName - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 1.50 μs | 1.34 μs | 0.89 | 0.03 | 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]()
[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.Reflection.Metadata.Perf_TypeName*'
```

### 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.Parse_FullNames(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.Parse_AssemblyQualifiedName(input: typeof(System.Int32*))

#### ETL Files

#### Histogram

#### JIT Disasms

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

#### 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.Parse_AssemblyQualifiedName(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<String, Boolean>))

#### 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.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.Reflection.Metadata.Nested))

#### 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.Collections.Generic.Dictionary`2[]))

#### 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.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.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.ParseAndGetFullName(input: typeof(System.Collections.Generic.Dictionary`2[]))

#### 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.ParseAndGetAssemblyQualifiedName(input: typeof(System.Int32&))

#### 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.ParseAndGetAssemblyQualifiedName(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[]) (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.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.ParseAndGetFullName(input: typeof(System.Reflection.Metadata.NestedGeneric<String, Boolean>))

#### 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 | x64
OS | ubuntu 22.04
Queue | ViperUbuntu
Baseline | [2dd5330804f9d4f49599d82c90a67892d4dd8af0](https://github.com/dotnet/runtime/commit/2dd5330804f9d4f49599d82c90a67892d4dd8af0)
Compare | [173e6b40e02cd1652102c09e07bd4cf7320b3d4d](https://github.com/dotnet/runtime/commit/173e6b40e02cd1652102c09e07bd4cf7320b3d4d)
Diff | [Diff](https://github.com/dotnet/runtime/compare/2dd5330804f9d4f49599d82c90a67892d4dd8af0...173e6b40e02cd1652102c09e07bd4cf7320b3d4d)
Configs | CompilationMode:tiered, RunKind:micro

### Improvements in PerfLabTests.GetMember

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

  • [GetMethod1 - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 27.81 μs | 20.79 μs | 0.75 | 0.23 | False | | |
|
  • [GetMethod2 - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 60.31 μs | 53.28 μs | 0.88 | 0.30 | False | | |
|
  • [GetMethod5 - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 186.41 μs | 166.35 μs | 0.89 | 0.09 | False | | |
|
  • [GetMethod12 - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 504.33 μs | 456.26 μs | 0.90 | 0.19 | 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 'PerfLabTests.GetMember*'
```

### PerfLabTests.GetMember.GetMethod1

#### ETL Files

#### Histogram

#### JIT Disasms

### PerfLabTests.GetMember.GetMethod2

#### ETL Files

#### Histogram

#### JIT Disasms

### PerfLabTests.GetMember.GetMethod5

#### ETL Files

#### Histogram

#### JIT Disasms

### PerfLabTests.GetMember.GetMethod12

#### 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 linked performance reports and src/benchmarks/micro/libraries/System.Reflection.Metadata/Perf.TypeName.cs around lines 44-60; compare the listed baseline and test commits. Determine whether the reported improvements need follow-up in the runtime, with a reproducible result or clear triage decision as the outcome.

Written by the indexing model from the issue text.

Assessment

Tech stack
csharp, linux, ubuntu
Domain
performance
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.