dotnet / dotnet/perf-autofiling-issues

[Perf] Linux/x64: 63 Improvements on 7/14/2026 4:54:43 PM +00:00

Open
#76,705 2 comments 0 reactions 0 assignees View on GitHub
arch-wasm arch-x64 branch-refs/heads/main compilationmode-wasm kind-micro Look Again os-linux perf-improvement runkind-micro 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 | [1baa904ac12c971494469fc724fb3b9f7126716d](https://github.com/dotnet/runtime/commit/1baa904ac12c971494469fc724fb3b9f7126716d)
Compare | [646ab80e65fcf3cb9f068157f644ead63761ee7c](https://github.com/dotnet/runtime/commit/646ab80e65fcf3cb9f068157f644ead63761ee7c)
Diff | [Diff](https://github.com/dotnet/runtime/compare/1baa904ac12c971494469fc724fb3b9f7126716d...646ab80e65fcf3cb9f068157f644ead63761ee7c)
Configs | CompilationMode:wasm, RunKind:micro

### Improvements in System.Text.Json.Tests.Perf_Reader

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

  • [ReadSpanEmptyLoop - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 152.12 μs | 88.18 μs | 0.58 | 0.17 | False | | |
|
  • [ReadSpanEmptyLoop - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 24.70 μs | 14.72 μs | 0.60 | 0.24 | False | | |
|
  • [ReadSingleSpanSequenceEmptyLoop - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 12.38 μs | 7.49 μs | 0.61 | 0.23 | False | | |
|
  • [ReadReturnBytes - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 13.32 μs | 8.10 μs | 0.61 | 0.23 | False | | |
|
  • [ReadSpanEmptyLoop - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 11.80 μs | 7.26 μs | 0.61 | 0.17 | False | | |
|
  • [ReadReturnBytes - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 26.03 μs | 16.07 μs | 0.62 | 0.15 | False | | |
|
  • [ReadSpanEmptyLoop - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 900.35 μs | 556.77 μs | 0.62 | 0.23 | False | | |
|
  • [ReadSingleSpanSequenceEmptyLoop - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 901.85 μs | 559.47 μs | 0.62 | 0.21 | False | | |
|
  • [ReadReturnBytes - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 962.15 μs | 598.66 μs | 0.62 | 0.21 | False | | |
|
  • [ReadSpanEmptyLoop - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 89.30 μs | 55.79 μs | 0.62 | 0.24 | False | | |
|
  • [ReadReturnBytes - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 96.64 μs | 60.97 μs | 0.63 | 0.21 | False | | |
|
  • [ReadSingleSpanSequenceEmptyLoop - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 88.48 μs | 55.97 μs | 0.63 | 0.23 | False | | |
|
  • [ReadSingleSpanSequenceEmptyLoop - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 23.31 μs | 14.82 μs | 0.64 | 0.26 | False | | |
|
  • [ReadSingleSpanSequenceEmptyLoop - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 37.67 μs | 24.06 μs | 0.64 | 0.24 | False | | |
|
  • [ReadSpanEmptyLoop - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 75.84 μs | 48.63 μs | 0.64 | 0.20 | False | | |
|
  • [ReadReturnBytes - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 147.34 μs | 94.70 μs | 0.64 | 0.21 | False | | |
|
  • [ReadSingleSpanSequenceEmptyLoop - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 138.77 μs | 89.34 μs | 0.64 | 0.28 | False | | |
|
  • [ReadReturnBytes - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 39.09 μs | 25.17 μs | 0.64 | 0.19 | False | | |
|
  • [ReadMultiSpanSequenceEmptyLoop - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 104.23 μs | 67.32 μs | 0.65 | 0.19 | False | | |
|
  • [ReadSpanEmptyLoop - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 1335.89 ns | 863.65 ns | 0.65 | 0.19 | False | | |
|
  • [ReadSingleSpanSequenceEmptyLoop - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 74.51 μs | 49.03 μs | 0.66 | 0.18 | False | | |
|
  • [ReadMultiSpanSequenceEmptyLoop - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 1032.89 μs | 688.71 μs | 0.67 | 0.18 | False | | |
|
  • [ReadSpanEmptyLoop - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 36.73 μs | 24.60 μs | 0.67 | 0.24 | False | | |
|
  • [ReadReturnBytes - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 1406.66 ns | 944.86 ns | 0.67 | 0.18 | False | | |
|
  • [ReadMultiSpanSequenceEmptyLoop - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 161.38 μs | 108.55 μs | 0.67 | 0.19 | False | | |
|
  • [ReadSingleSpanSequenceEmptyLoop - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 1381.18 ns | 934.76 ns | 0.68 | 0.20 | False | | |
|
  • [ReadMultiSpanSequenceEmptyLoop - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 84.40 μs | 57.24 μs | 0.68 | 0.20 | False | | |
|
  • [ReadMultiSpanSequenceEmptyLoop - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 25.93 μs | 17.61 μs | 0.68 | 0.25 | False | | |
|
  • [ReadMultiSpanSequenceEmptyLoop - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 13.75 μs | 9.40 μs | 0.68 | 0.21 | False | | |
|
  • [ReadMultiSpanSequenceEmptyLoop - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 43.97 μs | 30.28 μs | 0.69 | 0.21 | False | | |
|
  • [ReadReturnBytes - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 73.93 μs | 50.98 μs | 0.69 | 0.20 | False | | |
|
  • [ReadMultiSpanSequenceEmptyLoop - Duration of single invocation]()
  • 📝 - [Benchmark Source]()
  • [ADX - Test Multi Config Graph]()
| 2.14 μs | 1.70 μs | 0.79 | 0.22 | 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]()
![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.Text.Json.Tests.Perf_Reader*'
```

### System.Text.Json.Tests.Perf_Reader.ReadSpanEmptyLoop(IsDataCompact: False, TestCase: BroadTree)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Text.Json.Tests.Perf_Reader.ReadSpanEmptyLoop(IsDataCompact: False, TestCase: LotsOfStrings)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Text.Json.Tests.Perf_Reader.ReadSingleSpanSequenceEmptyLoop(IsDataCompact: False, TestCase: Json400B)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Text.Json.Tests.Perf_Reader.ReadReturnBytes(IsDataCompact: False, TestCase: Json400B)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Text.Json.Tests.Perf_Reader.ReadSpanEmptyLoop(IsDataCompact: False, TestCase: Json400B)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Text.Json.Tests.Perf_Reader.ReadReturnBytes(IsDataCompact: False, TestCase: LotsOfStrings)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Text.Json.Tests.Perf_Reader.ReadSpanEmptyLoop(IsDataCompact: False, TestCase: Json40KB)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Text.Json.Tests.Perf_Reader.ReadSingleSpanSequenceEmptyLoop(IsDataCompact: False, TestCase: Json40KB)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Text.Json.Tests.Perf_Reader.ReadReturnBytes(IsDataCompact: False, TestCase: Json40KB)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Text.Json.Tests.Perf_Reader.ReadSpanEmptyLoop(IsDataCompact: False, TestCase: Json4KB)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Text.Json.Tests.Perf_Reader.ReadReturnBytes(IsDataCompact: False, TestCase: Json4KB)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Text.Json.Tests.Perf_Reader.ReadSingleSpanSequenceEmptyLoop(IsDataCompact: False, TestCase: Json4KB)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Text.Json.Tests.Perf_Reader.ReadSingleSpanSequenceEmptyLoop(IsDataCompact: False, TestCase: LotsOfStrings)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Text.Json.Tests.Perf_Reader.ReadSingleSpanSequenceEmptyLoop(IsDataCompact: False, TestCase: LotsOfNumbers)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Text.Json.Tests.Perf_Reader.ReadSpanEmptyLoop(IsDataCompact: False, TestCase: DeepTree)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Text.Json.Tests.Perf_Reader.ReadReturnBytes(IsDataCompact: False, TestCase: BroadTree)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Text.Json.Tests.Perf_Reader.ReadSingleSpanSequenceEmptyLoop(IsDataCompact: False, TestCase: BroadTree)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Text.Json.Tests.Perf_Reader.ReadReturnBytes(IsDataCompact: False, TestCase: LotsOfNumbers)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Text.Json.Tests.Perf_Reader.ReadMultiSpanSequenceEmptyLoop(IsDataCompact: False, TestCase: Json4KB)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Text.Json.Tests.Perf_Reader.ReadSpanEmptyLoop(IsDataCompact: False, TestCase: HelloWorld)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Text.Json.Tests.Perf_Reader.ReadSingleSpanSequenceEmptyLoop(IsDataCompact: False, TestCase: DeepTree)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Text.Json.Tests.Perf_Reader.ReadMultiSpanSequenceEmptyLoop(IsDataCompact: False, TestCase: Json40KB)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Text.Json.Tests.Perf_Reader.ReadSpanEmptyLoop(IsDataCompact: False, TestCase: LotsOfNumbers)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Text.Json.Tests.Perf_Reader.ReadReturnBytes(IsDataCompact: False, TestCase: HelloWorld)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Text.Json.Tests.Perf_Reader.ReadMultiSpanSequenceEmptyLoop(IsDataCompact: False, TestCase: BroadTree)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Text.Json.Tests.Perf_Reader.ReadSingleSpanSequenceEmptyLoop(IsDataCompact: False, TestCase: HelloWorld)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Text.Json.Tests.Perf_Reader.ReadMultiSpanSequenceEmptyLoop(IsDataCompact: False, TestCase: DeepTree)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Text.Json.Tests.Perf_Reader.ReadMultiSpanSequenceEmptyLoop(IsDataCompact: False, TestCase: LotsOfStrings)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Text.Json.Tests.Perf_Reader.ReadMultiSpanSequenceEmptyLoop(IsDataCompact: False, TestCase: Json400B)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Text.Json.Tests.Perf_Reader.ReadMultiSpanSequenceEmptyLoop(IsDataCompact: False, TestCase: LotsOfNumbers)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Text.Json.Tests.Perf_Reader.ReadReturnBytes(IsDataCompact: False, TestCase: DeepTree)

#### ETL Files

#### Histogram

#### JIT Disasms

### System.Text.Json.Tests.Perf_Reader.ReadMultiSpanSequenceEmptyLoop(IsDataCompact: False, TestCase: HelloWorld)

#### 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

The report points to the System.Text.Json Utf8JsonReader benchmarks in src/benchmarks/micro/libraries/System.Text.Json/Utf8JsonReader/Perf.Reader.cs, including lines 74-79, 81-86, and 95-147. Start by reviewing those benchmark entries and the linked performance reports. The issue states no requested code change or acceptance criterion, so completion would require triage to define the follow-up.

Written by the indexing model from the issue text.

Assessment

Tech stack
wasm
Domain
performance
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.